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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user