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") @SinceKotlin("1.7")
@ExperimentalStdlibApi @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. * Returns this [Optional]'s value if [present][Optional.isPresent], or otherwise the result of the [defaultValue] function.
*/ */
@SinceKotlin("1.7") @SinceKotlin("1.7")
@ExperimentalStdlibApi @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() if (isPresent) get() else defaultValue()
/** /**
@@ -23,7 +23,7 @@ class OptionalsTest {
// Return type can be a supertype // Return type can be a supertype
assertNull(Optional.empty<String>().getOrDefault(null)) 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 @Test
@@ -33,7 +33,7 @@ class OptionalsTest {
// Return type can be a supertype // Return type can be a supertype
assertNull(Optional.empty<String>().getOrElse { null }) 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 @Test