nullable Kotlin


type?  널을 담을 수 있는 type형식 변수, 
- 컴파일 단계에서 null에 구별된 처리 가능
-  NPE로 Crash 되는것을 방지

?: - 엘비스 연산자
a=b?:"" // b가 널이면 ""

as? - cast 연산자
해당 형식으로 cast할 수 없으면 null을 리턴


class Person(val firstName: String, val lastName: String) {
override fun equals(o: Any?): Boolean {
val otherPerson = o as? Person ?: return false
return otherPerson.firstName == firstName && otherPerson.lastName == lastName
}

override fun hashCode(): Int = firstName.hashCode() * 37 + lastName.hashCode()
}

fun a() {
val p1 = Person("Dmitry", "Jemerov")
val p2 = Person("Dmitry", "Jemerov")
println(p1 == p2)// equals, true
println(p1.equals(42))//false
}

!! - 강제 Not Null 형식 전환
널이면 에러를 발생시킨다


let 함수
널 가능 값을 널 불가 인자 함수로 넘길 때


fun sendEmailTo(s: String) {

}

fun getEmail(): String? {
return null
}

fun a() {
val email = getEmail()
email?.let { email -> sendEmailTo(email) } // 널이면 스킵
email?.let { sendEmailTo(it) } // 널이면 스킵
}

fun b() {
getEmail()?.let { sendEmailTo(it) }
}

lateinit var
생성자에서 초기화하지 않지만 널이 아닌 변수값에 사용, 
만약 할당되지 않은 상태에서 접근하면 lateinit property . has not been initialized 예외발생



덧글

댓글 입력 영역