15

私のコンパイラは について警告しますA default nullness annotation has not been specified for the package。Java 7 で Juno を使用しています。

パッケージオプションとして追加する必要があるドキュメント統計ですが@NonNullByDefault、それが何を意味するのかわかりません。

NonNullByDefaultどういうわけかパッケージ全体に設定できますか? Eclipse では、パッケージを右クリックしてadd option何かを言うことはできません。

それとも@NonNullByDefault、パッケージ内の任意のクラスに追加するだけで、そのパッケージ内のすべての Bean に対して有効になりますか? または、パッケージ オプションを追加するには、パッケージにメタ情報ファイルを作成する必要がありますか? オンラインで助けが見つからないので、私は目が見えないに違いありません....

小さな例は素晴らしいでしょう。

4

3 に答える 3

14

概要:
上記のアドバイスを機能させることは、私には直感的ではありませんでした。また、私が考え出した実際の解決策でもありませんでした。package-info.java ファイル
で: a.パッケージ宣言の上に注釈を追加します。パッケージ宣言の後に NonNullByDefault アノテーション import を配置します


詳細:
上記の回答を読んで、これを機能させる方法を理解できなかったのは私だけかどうかはわかりません。したがって、さらに明確にするために、これをEclipse-Junoで最終的に機能させるために行った(自明でも直感的でもない)手順を次に示します。

  1. パッケージ エクスプローラーで、「パッケージにデフォルトの nullness アノテーションが指定されていません... 」で始まる警告 (またはエラー) メッセージを表示しているルート Java パッケージに移動します。この例では、「org.public_domain」のパッケージ名を想定してください。 "
  2. Java パッケージで、右クリック メニューをアクティブにし、[新規] -> [パッケージ] オプションを選択します。はい、パッケージが既に存在することは知っています。Eclipse の特異性と考えてください。既存のパッケージには何もしません。
  3. New Java Package」ダイアログが表示されたら、「Create package-info.java」チェックボックスをオンにして、「Finish」をクリックします
  4. Java エディタには、「package-info.java」というタイトルの新しいファイルが次の内容で表示されます。

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    package org.public_domain;
    
  5. ここで、ファイルの内容を次のように並べ替えます。

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @NonNullByDefault  
    package org.public_domain;  
    import org.eclipse.jdt.annotation.NonNullByDefault;
    

    …とか、こう…

    /**
     * 
     */
    /**
     * @author xyz
     *
     */  
    @org.eclipse.jdt.annotation.NonNullByDefault
    package org.public_domain;  
    
  6. eclipse @NonNullByDefault である素晴らしさをお楽しみください

私の課題は、パッケージ宣言の上に注釈を配置することを考え出すことでした。そして、パッケージ宣言の後に NonNullByDefault アノテーション import を配置します。私にとって、それは直感的ではありませんでした。

これが、私がこの特定の経路を追いかけて燃え尽きてしまった時間を他の誰かに節約してくれることを願っています.

于 2013-06-14T21:29:23.387 に答える
2

ソースコードまたはJavaDocsを参照してください。

Note that for applying an annotation to a package a file by the name
package-info.java is used.

と:

@Target({PACKAGE,TYPE,METHOD,CONSTRUCTOR})
于 2012-05-16T18:31:49.890 に答える