2013-11-25 19 views
8

私は最後のJDK 8(B116)をインストールしたが、私は型注釈を使用できないことに気づきました。たとえば私が書く場合は、Javaチュートリアルを読み取るための :のJava 8、型注釈とJSR 308

String str = null; 
String myString = (@NonNull String) str; 

または

TEST st = new @Interned TEST(); 

コンパイラ私に次のエラー与える:

annotation type not applicable to this kind of declaration 

を今では動作します。型注釈を使用する前に、 という注釈に@Target(ElementType.TYPE_USE)と注釈を付ける必要があります。下のコメントを見てください!

のような注釈あれば私も理解していない:NonNullInternedなどが JDKに挿入されるか、我々はChecker Framework

+2

これらの注釈は、それらの位置に適用できることを確認してください。 '@ Target'アノテーションを確認してください。 –

+1

Java 8コンパイラを使用していて、ソースレベルをJava 8に設定していますか?あなたが言っていることは、Oracle JavaチュートリアルでJava 8について語っていることとは直接矛盾しているためです。 http://docs.oracle.com/javase/tutorial/java/annotations/basicsを参照してください。html –

+1

@Sotirios Delimanolis、それは私の注釈インターフェイスで動作します。たぶん私はNonNull、Internedなどで混乱しています... JDKには存在しません...タイプアノテーションを使用すると@Target(ElementType.TYPE_USE)を使用すれば十分です。 – xdevel2000

答えて

5

をダウンロードする必要があればあなたは、あなたの質問の最初の部分に答えていますあなた自身。第二部のために

I also don't understand if the annotations like: NonNull , Interned , etc. will be inserted in the JDK or if we have to download the Checker Framework.

注釈は、Javaクラス/インタフェースだけのようなものです。ソースコードで定義し、コンパイルする必要があります。

確定的なソースコードおよび/またはバイトコードファイルが理想的です。ただし、注釈のソースコード(パッケージ名、注釈名、フィールド名、およびタイプ)の顕著な部分を再現してコンパイルする場合、残りのJVMは賢明ではありません。

@NonNull@Internedのような特定の注釈については、さまざまなパッケージに複数のバージョンが存在する可能性があることを認識する必要があります。標準/デファクトスタンダード版が出現するまで問題が発生する可能性があります(アノテーション処理ソフトウェア用)。 Checkers Frameworkをデファクトスタンダードと呼ぶことができるのかどうかはわかりません。

チェッカー注釈は、Java 8ライブラリに追加されるかどうかを尋ね。それらの注釈のパッケージ名は受け入れられないので、私は個人的にそれを疑う。しかし、第二部のために

4

...様子見:

I also don't understand if the annotations like: NonNull, Interned, etc. will be inserted in the JDK or if we have to download the Checker Framework.

は、Oracle配布JDKが@NonNullと@Internedなどの注釈が含まれていません - それらの定義は、また上のそれらの出現もありませんJDKメソッド

Checker Framework manualで説明したようにしかし、チェッカーフレームワークは、JDKの注釈付きバージョンを含んでいます。 Checkerフレームワークでは、実行時およびコンパイル時にもライブラリの最終バージョンを使用できますが、プラグ可能な型チェックで注釈が表示されるため、型チェックの結果がより正確になります。