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の発生した場合
・コンストラクタ内で利用可能だが初期化されていないオブジェクトが存在する場合