JEP draft: Null-Restricted Value Class Types (Preview)

今年もよろしくお願いいたします。

openjdk.org

Null-Restricted Value Class Types (Preview)か、、、

nullを許容しないために ! を使うんですね。

現状は以下のようにnullを入れることができる。

Range r = new Range(1, 3);
printAll(r);
r = null;
printAll(r); // NullPointerException

Object o = null;
r = (Range!) o; // NullPointerException

許可しない。

Range![] a1 = new Range![3];
a1[0] = new Range(-3, 0);

Range[] a2 = a1;
a2[1] = null; // ArrayStoreException

Object[] a3 = a2;
a3[2] = new Object(); // ArrayStoreException
a3[2] = null; // ArrayStoreException

、、、

例だからあれかもしれないですが、 変数をnullで再代入するのか? こういう使い方じゃなければ需要があるのでは思ったり。