LoginSignup
0

KotlinのNULL安全

Posted at

Kotlinはプログラムの実行時にNullPointerExceptionが発生する可能性を極力排除するように働きかけてくれます。
Null参照についての構文が厳しく設定されいます。守られていない場合はコンパイルエラーになるようになっています。
KotlinはNull参照に厳しいです。

非Null型とNull可能型

Kotlinには「非Null型」と「Null可能型」があり、 Null参照を保持できない型とNull参照を保持できる型を区別し、KotlinはNull安全を保証しています。
・非Null型:Int、String、Boolean、自分で作ったクラスなど
    var noNull: String = "abc"
    noNull = null //ここでコンパイルエラー

・Null可能型:String?、Int?、Boolean?、自分で作ったクラス?など

    var okNull: String? = "abc"
    okNull = null //ここでコンパイルエラーにならない


上記を見てわかるとおり、Null可能型にするには型のあとに「?」を付けます。

意識せずに宣言した変数は必ずnullが保持できないことになるので、
普通に宣言した変数やメソッドなどにアクセスする際にNullPointerExceptionが発生しないことを保証します。意図的に?を書かない限りは思わぬnull参照を防いでくれます。

!! 演算子

あまりないかもしれませんが、NullPointerExceptionを発生させたい!!といった時には「!!演算子」を使用します。
    val okNull: String? = null
    val length = okNull!!.length


「!!演算子」は、Null可能型のオブジェクトがnullでなければそのまま値を返却します。もしnullならNullPointerExceptionをthrowします。
NullPointerExceptionを発生させたい時は、「!!演算子」を使用することでNullPointerExceptionを拾うことが可能です。「!!演算子」を使用する場合はcatchをしっかりしましょう。

NullPointerExceptionが発生する場面

 ・明示的にNullPointerExceptionをthrowする呼び出し方(!!演算子)
 ・外部コードでのNullPointerExceptionの発生した場合
 ・コンストラクタ内で利用可能だが初期化されていないオブジェクトが存在する場合

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0