여기서 companyName이 map에 들어 있지 않거나 manager가 없거나 manager는 있지만 그 안에 address가 없거나 city가 없을 수 있다. if ... else 구조를 내포하면서 사용하면 널 안전성을 확보할 수도 있지만 코틀린 구문이 훨씬 더 편리하다. 같은 일을 하는 자바 코드와 비교해도 코틀린 코드가 더 간결하다.
City city = Optional.ofNullable(map.get(companyName)) .flatMap(Company::getManager) .flatMap(Employee::getAddress) .flatMap(Address::getCity) .getOrElse(null);
앞에서 말한 것처럼 코틀린은 NPE에 대한 모든 책임을 프로그래머가 지게 한다.
val city: City? = map[companyName]!!.manager!!.address!!.city
이 구문을 사용할 때 중간에 null이 있으면(city는 제외) NPE가 발생한다.