코틀린의 해법은 아마도 두 접근 방식을 가장 잘 절충한 방법일 것이다. 코틀린에서 모든 타입은 기본적으로 널이 될 수 없는(non-nullable) 타입이다. 하지만 무언가 null 결과를 내놓을 수 있다면, 타입 이름 뒤에 물음표(?)를 붙여서 결과가 null이 될 수도 있음을 표시해야 한다.
NullableTypes/NullableTypes.kt
import atomictest.eq
fun main() {
val s1 = "abc" // [1]
// 컴파일 오류
// val s2: String = null // [2]
// 널이 될 수 있는 정의들
val s3: String? = null // [3]
val s4: String? = s1 // [4]
// 컴파일 오류
// val s5: String = s4 // [5]
val s6 = s4 // [6]
s1 eq "abc"
s3 eq null
s4 eq "abc"
s6 eq "abc"
}