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 예외발생




최근 덧글