[解決済み] アノテーションのフィールドにデフォルトのヌル値を設定する際の不具合
質問
属性値は一定でなければならない」というエラーが発生するのはなぜですか。これは null は定数ではないですか?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SomeInterface {
Class<? extends Foo> bar() default null;// this doesn't compile
}
どのように解決するのですか?
なぜかわからないのですが JLS は非常にわかりやすい。
Discussion
Note that null is not a legal element value for any element type.
そして、デフォルト要素の定義は
DefaultValue:
default ElementValue
残念ながら、新しい言語機能(Enumsと現在のAnnotations)は、言語仕様を満たしていない場合、非常に役に立たないコンパイラのエラーメッセージが表示されることを発見し続けました。
編集: 少しググってみると を見つけました。 をJSR-308で見つけ、この状況でnullを許容することを主張している。
我々はこの提案に対するいくつかの可能な反論を記します。
この提案は、これまで不可能だったことを可能にするものではありません。
プログラマが定義した特別な値は、「なし」「初期化されていない」「nullそのもの」などを意味するかもしれないnullよりも、より良いドキュメントを提供します。
提案はよりエラーを起こしやすいものです。明示的な値に対するチェックを忘れるよりも、nullに対するチェックを忘れる方がはるかに簡単です。
提案は標準的なイディオムをより冗長にする可能性があります。現在、注釈のユーザーだけが、その特別な値についてチェックする必要があります。この提案により、アノテーションを処理する多くのツールは、ヌルポインター例外をスローしないように、フィールドの値がヌルであるかどうかをチェックする必要があります。
最後の 2 つのポイントだけが、quot;そもそもなぜそうしないのか、に関連していると思います。私は、開発者のコードを明確にするためにその種のチェックを行う必要があるのは、むしろその逆ではなく、アノテーション プロセッサやその他のフレームワーク コードの仕事であると考える傾向がありますが、それは確かにそれを変更することを正当化するのが難しくなります。
関連
-
Javaでよくある構文エラー
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
FindBugの使用概要
-
[解決済み] シリアライズ中にフィールドの値が NULL の場合、それを無視するように Jackson に指示するにはどうすればよいですか?
-
[解決済み] Spring の @Autowired フィールドが NULL になっているのはなぜですか?
-
[解決済み] なぜJava 8のOptionalは引数で使ってはいけないのか
-
[解決済み】JPAのカラムにデフォルト値を設定する
-
[解決済み] 定数からアノテーションに値を供給する方法 java
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] Springの@Valueにnullをデフォルト値として設定することは可能ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
javaの非静的メソッドを静的に参照することができない
-
Solve モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory エラー
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
Jsoup-Crawlingの動作
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
java.sql.SQLException: 結果セットの開始前
-
List list = new ArrayList(); Error: ArrayList は型に解決できません。
-
Javaがテキストファイルを読み込む