Simplify signatures of Optional extensions getOrDefault and getOrElse

Two generic types are not need to cover the same use cases.

KT-50484
This commit is contained in:
Ilya Gorbunov
2022-09-14 18:17:33 +02:00
committed by Space
parent 0251d432e9
commit b76854eddf
2 changed files with 4 additions and 4 deletions
@@ -19,14 +19,14 @@ public fun <T : Any> Optional<T>.getOrNull(): T? = orElse(null)
*/
@SinceKotlin("1.7")
@ExperimentalStdlibApi
public fun <R, T : R & Any> Optional<T>.getOrDefault(defaultValue: R): R = if (isPresent) get() else defaultValue
public fun <T> Optional<out T & Any>.getOrDefault(defaultValue: T): T = if (isPresent) get() else defaultValue
/**
* Returns this [Optional]'s value if [present][Optional.isPresent], or otherwise the result of the [defaultValue] function.
*/
@SinceKotlin("1.7")
@ExperimentalStdlibApi
public inline fun <R, T : R & Any> Optional<T>.getOrElse(defaultValue: () -> R): R =
public inline fun <T> Optional<out T & Any>.getOrElse(defaultValue: () -> T): T =
if (isPresent) get() else defaultValue()
/**
@@ -23,7 +23,7 @@ class OptionalsTest {
// Return type can be a supertype
assertNull(Optional.empty<String>().getOrDefault(null))
assertEquals(5.0, Optional.empty<Int>().getOrDefault<Number, Int>(5.0))
assertEquals(5.0, Optional.empty<Int>().getOrDefault(5.0))
}
@Test
@@ -33,7 +33,7 @@ class OptionalsTest {
// Return type can be a supertype
assertNull(Optional.empty<String>().getOrElse { null })
assertEquals(5.0, Optional.empty<Int>().getOrElse<Number, Int> { 5.0 })
assertEquals(5.0, Optional.empty<Int>().getOrElse { 5.0 })
}
@Test