[kotlin] 코 틀린 더블 뱅 (!!) 연산자는 무엇입니까?

Android Studio에서 Java를 Kotlin으로 변환하고 있습니다. 인스턴스 변수 다음에 두 번 강타합니다. 이중 강타 란 무엇이며 더 중요한 것은 어디에 기록되어 있습니까?

mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))



답변

이것은 안전하지 않은 nullable 형식입니다 ( T?nullable이 아닌 유형 (로) 변환 T),
!!슬로우합니다 NullPointerException값이있는 경우 null.

여기 에는 Kotlin null 안전 수단과 함께 여기 에 설명되어 있습니다 .


답변

다음은 상황을 명확하게하는 예입니다. 이 기능이 있다고 가정 해보십시오.

fun main(args: Array<String>) {
    var email: String
    email = null
    println(email)
}

다음과 같은 컴파일 오류가 발생합니다.

Null can not be a value of a non-null type String

이제 String유형에 물음표를 추가하여 널 입력 가능하게 함으로써이를 방지 할 수 있습니다 .

그래서 우리는

fun main(args: Array<String>) {
    var email: String?
    email = null
    println(email)
}

이 결과는

null

이메일 값이 null 일 때 함수에서 예외를 발생 시키려면 이메일 끝에 두 개의 느낌표를 추가 할 수 있습니다. 이렇게

fun main(args: Array<String>) {
    var email: String?
    email = null
    println(email!!)
}

이것은 던져 KotlinNullPointerException


답변

더블 뱅 오퍼레이터 는 팬 NullPointerException(또는 짧은 경우 NPE) 팬에게 탁월한 옵션입니다 .

아닌 어설 션 연산자!! 는 모든 값을 아닌 유형으로 변환 하고 값이 널인 경우 예외를 발생시킵니다.

val nonNull = a!!.length

그래서 당신은 쓸 수 a!!있으며 이것은 null이 아닌 값을 반환 하거나 (예 a: String여기) NPE를 던질 것입니다.a 널 (null)입니다.

NPE를 원할 경우 NPE를 가질 수 있지만 명시 적으로 요청해야합니다. 개발자가 보증하는 경우이 연산자를 사용해야합니다. 값은 null이되지 않습니다 .


답변