import java.util.Optional
import kotlin.jvm.optionals.getOrDefault
import kotlin.jvm.optionals.getOrElse
import kotlin.jvm.optionals.getOrNull
import kotlin.jvm.optionals.toList
val opt: Optional<String> = Optional.of("Kotlin")
val empty: Optional<String> = Optional.empty()
// *** before: ***
val valueOld: String? = if (opt.isPresent) opt.get() else null
// *** in version 1.8: ***
// the extensions turn a Java Optional into ordinary Kotlin nullability
val value: String? = opt.getOrNull()
val orDefault: String = empty.getOrDefault("none")
val orComputed: String = empty.getOrElse { "computed" }
val asList: List<String> = opt.toList()
fun main() {
println("$valueOld $value $orDefault $orComputed $asList")
println(empty.getOrNull()?.length ?: 0)
}