Android Studio에서 Java를 Kotlin으로 변환하고 있습니다. 인스턴스 변수 다음에 두 번 강타합니다. 이중 강타 란 무엇이며 더 중요한 것은 어디에 기록되어 있습니까?
mMap!!.addMarker(MarkerOptions().position(london).title("Marker in London"))
답변
이것은 안전하지 않은 nullable 형식입니다 ( T?
nullable이 아닌 유형 (로) 변환 T
),
!!
슬로우합니다 NullPointerException
값이있는 경우 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이되지 않습니다 .