Class<? extends Foo> bar() default null;// this doesn't compile
述べたように、Java言語仕様では、注釈はデフォルトでnull値を許可していません。
私がするべきことは、DEFAULT_VALUE
の定数定義をアノテーション定義の先頭に定義することです。何かのように:私のコードで次に
public static final String DEFAULT_VALUE = "__class-name-here__ default";
public String prefix() default DEFAULT_VALUE;
私のようなものを実行します。クラスであなたの場合
if (myAnnotation.prefix().equals(MyAnnotation.DEFAULT_VALUE)) { ... }
を、私はちょうどマーカークラスを定義します。
Class<? extends Foo> bar() default DefaultFoo.class;
コードを実行できるように、あなたのDefaultFoo
クラスがするのと同じ空の実装:残念ながら、あなたはとても代わりにあなたのような何かをする必要があり、このための定数を持つことはできません
if (myAnnotation.bar() == DefaultFoo.class) { ... }
希望これを他の人を助ける。
はい、同様のことを行います(デフォルトではFoo.classを使用しています)。吸う。 – ripper234
Stringフィールドの場合は、[magic strings](http://en.wikipedia.org/wiki/Magic_string)にアクセスする必要があります。明らかによく知られている反パターンは、よく理解されている言語機能よりも優れています。 –
@TimYates nullが利用可能で、普遍的に理解されている場合、自分の「無価値」の価値を定義する人々を見るために私を殺します。そして今、それは言語自体によって必要とされているのですか?幸いなことに、あなたの "マジックストリング"を公の定数として定義することができます。まだ理想的ではありませんが、少なくとも注釈を探しているコードでは、リテラルを使用する代わりに定数を参照できます。 – spaaarky21