【KotlinとJava】Null不可プロパティ
KotlinとJava
Kotlinではnull
の扱いにとても注意を払っている。今回はメンバー変数にnullを代入しないようにするための機能を紹介する。
NotNull property.kt
import kotlin.properties.Delegates
class User {
var name: String by Delegates.notNull()
fun init(name: String) {
this.name = name
}
}
fun main(args: Array<String>) {
val user = User()
// user.name -> IllegalStateException
user.init("Carl")
println(user.name)
}
内部的に以前紹介した委譲プロパティ(デリゲート)が展開されるため、大量のメンバー変数(プロパティ)があるクラスファイルなどでは扱いに注意しよう。
Javaで記述
対比ができるようにJavaでも同じものを記述してみよう。
public class User {
private String name;
public void init(String name) {
if (name == null) {
throw new IllegalStateException();
}
this.name = name;
}
public String getName() {
if (name == null) {
throw new IllegalStateException();
}
return name;
}
}
public class Exp20 {
public static void main(String[] args) {
final User user = new User();
user.init("Carl");
System.out.println(user.getName());
}
}
Kotlinの場合、変数にnullを代入しようとすると、コンパイル時にエラーが発生してしまい、nullを代入することができない(代入する方法もある)。
Javaではそういった仕組みがないので、代入したときに例外が発生するという書き方をさせてもらった。
コンパイル時と実行時の差は大きい。
コメント
コメントを投稿