Generics
Nullable Generics
Allow a generic box to hold a missing value.
nullable-generic
A generic type argument can be nullable, just like a regular type.
Nullable Generics
NullableGenerics.kt
Replay: real traced execution (multi-file project)
class MaybeBox<T>(val value: T?) {
fun orFallback(fallback: T): T {
if (value == null) {
return fallback
}
return value
}
}
fun main() {
val input: String? = "Ada"
val box = MaybeBox(input)
val name = box.orFallback("guest")
println("input=${input ?: "none"}")
println("name=$name")
}
class MaybeBox<T>(val value: T?) {
fun orFallback(fallback: T): T {
if (value == null) {
return fallback
}
return value
}
}
fun main() {
val input: String? = null
val box = MaybeBox(input)
val name = box.orFallback("guest")
println("input=${input ?: "none"}")
println("name=$name")
}
class MaybeBox<T>(val value: T?) {
fun orFallback(fallback: T): T {
if (value == null) {
return fallback
}
return value
}
}
fun main() {
val input: String? = "Bo"
val box = MaybeBox(input)
val name = box.orFallback("guest")
println("input=${input ?: "none"}")
println("name=$name")
}
input ← Ada
10fun main() {11 val input→ Ada: String? = "Ada" //@input=null, "Bo"12 val box = MaybeBox(inputAda)13 val name = box.orFallback("guest")fun orFallback(fallback: T): T
1class MaybeBox<T>(val value: T?) {2 fun orFallback(fallbackguest: T): T {3 if (value == null) {4 return fallback5 }6 return valueAda7 }name ← Ada
12 val box = MaybeBox(input)13 val name→ Ada = box.orFallback("guest")1415 println("input=${inputAda ?: "none"}")16 println("name=$nameAda")17}outputinput=Ada name=Ada
input ← null
10fun main() {11 val input→ null: String? = null12 val box = MaybeBox(inputnull)13 val name = box.orFallback("guest")fun orFallback(fallback: T): T
1class MaybeBox<T>(val value: T?) {2 fun orFallback(fallbackguest: T): T {3 if (value == null) {if (value == null)
2fun orFallback(fallback: T): T {3 if (valuenull == null) {4 return fallbackguest5 }name ← guest
12 val box = MaybeBox(input)13 val name→ guest = box.orFallback("guest")1415 println("input=${inputnull ?: "none"}")16 println("name=$nameguest")17}outputinput=none name=guest
input ← Bo
10fun main() {11 val input→ Bo: String? = "Bo"12 val box = MaybeBox(inputBo)13 val name = box.orFallback("guest")fun orFallback(fallback: T): T
1class MaybeBox<T>(val value: T?) {2 fun orFallback(fallbackguest: T): T {3 if (value == null) {4 return fallback5 }6 return valueBo7 }name ← Bo
12 val box = MaybeBox(input)13 val name→ Bo = box.orFallback("guest")1415 println("input=${inputBo ?: "none"}")16 println("name=$nameBo")17}outputinput=Bo name=Bo