JSR 308は、Javaに型注釈を追加することを提案しています。承認後、プログラマーはJavaタイプが現在許可されている場所であればどこでも注釈を追加できるようになります。これには、メソッド/フィールド/ローカル/パラメーターの装飾だけでなく、コンストラクター呼び出し、型キャスト、そして最も不思議なことにインスタンスのチェックも含まれます。Checker Frameworkは、 JSR 308を使用し@NonNull
て、オブジェクト型や文字列などの型修飾子を実装@Regex
します。
チェッカーが行うことは、コードを静的に分析することだけです。これがコンパイル時のチェックです。それはいいです。しかし、私が欲しいのは、実行時にチェックを実行できるメカニズムです。次のように宣言できます。
@Regex String p1 = "[a-z]+";
@Regex String p1 = "[a-z)+"; // compile time error from annotation processor
私も書くことができます:
if (x instanceof @Regex String) ...
ただし、これはと同じx instanceof String
で、実行時チェックは実行されません。小切手で任意のコードを実行してブール値を返すことができるコンパイル時アノテーションプロセッサまたはランタイムバイトコードマニピュレータが必要です。instanceof
これはJavaで可能ですか?