java
- null을 허용한다.
- Android Annotation을 이용하여 @NonNull과 @Nullable을 지정할 수 있다.
Null 처리 메소드 - java
public void set(@NonNull String a, @Nullable String b) {
if(a == null) throw new NullPointerException("a is null"); // a가 null일 시 NullPointerException을 발생시킬 수 있다.
System.out.println("a " + a + ", b " +b);
}
-> Annotation을 사용할 수 있지만 다음 코드를 사용할 수 있다.
set(null, null);
// 빌드시 에러 안생김.
kotlin
- 기본적으로 null을 허용하지 않는다.
- null을 명시적으로 나타내기 위해서 ?을 추가해야 한다.
- java 디컴파일시 Exception이 발생하도록 내부 처리를 하고 있다.
- IDE에서 null을 사용할 수 없음을 즉시 알려준다.
Null 처리 메소드 - kotlin
fun set (a : String, b : String?) {
// Do noting
}
-> null을 허용하지 않은 변수에 null을 대입하면 즉시 오류가 발생한다.
set(null, null) // 에러 발생 a가 null 이면 안됨
java to kotlin - NonNull
@NonNull String a = ""; -> var/val a : String = ""
-> java에서는 워닝이 발생하지만, kotlin은 오류가 발생한다.
@NonNull String a = null; -> var/val a : String = null
@Nullable String b = null; -> var/val b : String? = null
-> java/kotlin 모두 null 또는 초기화를 가질 수 있다.
@Nullable String b = ""; -> var/val b : String? = ""
if/else로 null 체크하기
-> java
String temp = null;
int size = 0;
if (temp != null) {
size = temp.length();
}
String temp = null;
int size = 0;
if (!TextUtils.isEmpty(temp)) {
size = temp.length();
}
-> kotlin
var temp : String? = null
var size = 0
if (temp != null) {
size = temp.length
}
-> java 에서 3항 식
String temp = null;
int size = temp != null? temp.length() : 0;
-> kotlin은 3항 식을 제공하지는 않는다.
var temp : String? = null
val size = if (temp != null) temp.length else 0
if/else 대신 safe Calls
safe Calls
// null을 포함할 수 있는 temp var 변수이며, null로 초기화 한다.
var temp : String? = null
// 물음표(?.)를 다시 한번 포함
val size = temp?.length
safe Calls의 장점은?
// 다음고 같이 초기화되었을 경우
// AAA aaa = new AAA(new BBB((CCC) null));
-> java
if (aaa != null && aaa.bbb != null && aaa.bbb.ccc != null) {
return aaa.bbb.ccc.name;
}
return null;
-> kotlin
return aaa?.bbb?.ccc?.name
fun test() {
val aaa : AAA? = AAA(BBB(null))
val name = aaa?.bbb?.ccc?.name
println("name $name")
}
data class AAA(val bbb : BBB?)
data class BBB(val ccc : CCC?)
data class CCC(val name : String?)
'# 02 > 코틀린' 카테고리의 다른 글
[Kotlin] Null 예외처리 - etc (0) | 2019.07.11 |
---|---|
[Kotlin] Null 예외처리 (0) | 2019.07.11 |
[Kotlin] return and jumps and This-expressions (0) | 2019.07.11 |
[Kotlin] Lambda (0) | 2019.07.11 |
[Kotlin] Control Flow - if/when/loops (0) | 2019.07.11 |