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