mapOf()는 키의 존재에 대한 보장이없는 Map을 제공합니다. 이는 Map의 Java 구현을 고려할 때 특히 기대되는 종류입니다.
null-safe 호출 및 elvis 연산자를 사용하는 것이 개인적으로 선호 될 수 있지만 호출 사이트에서 더 깨끗한 코드를 선호하는 것처럼 들립니다 (특히 이러한 키가 존재하고 null이 아닌 값과 연결되어 있음을 알고 있다고 생각할 때). 다음을 고려하십시오 :
class NonNullMap<K, V>(private val map: Map<K, V>) : Map<K, V> by map {
override operator fun get(key: K): V {
return map[key]!! // Force an NPE if the key doesn't exist
}
}
map 구현에 위임하지만 get 메소드를 대체함으로써 리턴 값이 널이 아닌 것을 보장 할 수 있습니다. 이것은 당신이 더 이상 usecase에 대해 걱정할 필요가 없다는 것을 의미합니다 !!,?, 또는? :
일부 간단한 테스트 코드가이 사실로 보여줍니다
fun main(args: Array<String>) {
val rank = nonNullMapOf("J" to 11, "Q" to 12, "K" to 13, "A" to 14)
val jackValue: Int = rank["J"] // Works as expected
println(jackValue)
val paladinValue: Int = rank["P"] // Throws an NPE if it's not found, but chained calls are considered "safe"
println(jackValue)
}
// Provides the same interface for creating a NonNullMap as mapOf() does for Map
fun <K, V> nonNullMapOf(vararg pairs: Pair<K, V>) = NonNullMap(mapOf<K, V>(*pairs))
청소기 코드에 대한 것이 바람직 할 수있다 '값'속성을 사용하여 열거 형. 다음은 간단한 구문 예입니다. http://pastebin.com/1BtynHMN –