【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ではそういった仕組みがないので、代入したときに例外が発生するという書き方をさせてもらった。

コンパイル時と実行時の差は大きい。

コメント

このブログの人気の投稿

【KotlinとJava】分解宣言

wxPythonでのモーダルダイアログ作成