型情報について妄想吐いてみる。

//型に付くメタデータその1
annotation NonNull applies Object; //nullはObjectじゃないからこれだけでOK。

//メソッド(関数)定義
String@[NonNull] fuga(String hoge@[NonNull]) {
  処理。
}

String@[NonNull] foo;       //コンパイルエラー(暗黙の=null挿入の検知)
String@[NonNull] bar= "All your base are ";
String baz= "belong to us.";
String qux= null;
String quux = fuga(foo);
fuga(baz);              //コンパイルエラー
String@[NonNull] corge = fuga(([NonNull])baz);
fuga(([NonNull])qux);       //実行時エラー

//メタデータなしのメソッド(関数)定義
String piyo() {
  処理。
}

String grault = piyo();
String@[NonNull] garply = piyo(); //コンパイルエラー