web-dev-qa-db-ja.com

Javaでの@interfaceデフォルト宣言の使用

この機能を発見しました。

「@interface」構文を使用してインターフェイスを宣言すると、デフォルト値を設定できます。

public @interface HelloWorld { 
     public String sayHello() default "hello world";
}

これは私にとって新しいことです。そのデフォルト値はどのように使用されると想定されていますか。

WwwにはJava 1.5で「@」を追加する前のJavaインターフェース文書がいっぱいであるため、参照を見つけることができません(0.5または.4でしたか?)


[〜#〜] edit [〜#〜]

答えてくれてありがとう (タグをすでに使用しているため、「注釈」に何らかの形で近かった):P

私は何年も前にその文書を読むべきだと知っていました!!! ...見てみましょう...

多くのAPIには、かなりの量の定型コードが必要です。 For ....

52
OscarRyz

注釈 を書いたところです。

特にdefaultステートメントに関して:これは、注釈とインターフェースにコンストラクターがないために使用されます。これが注釈属性のデフォルト値を持つ唯一の方法です。 Java言語仕様 から:

注釈タイプ要素には、デフォルト値が指定されている場合があります。これは、(空の)パラメータリストにキーワードdefaultと要素のデフォルト値を指定することにより行われます。

デフォルトは、注釈の読み取り時に動的に適用されます。デフォルト値は注釈にコンパイルされません。したがって、デフォルト値を変更すると、変更が行われる前にコンパイルされたクラスでも注釈に影響します(これらの注釈にはデフォルト要素の明示的な値がないと仮定します)。

ただし、 Java.lang.annotation のアノテーションはデフォルト値を使用していません。


使用法:属性sayHelloを持つ注釈_@HelloWorld_があります。次のようなクラスに配置できます。

_@HelloWorld(sayHello="Hi")
public class MyClass {
}
_

デフォルト値があるので、単に置くことができます

_@HelloWorld
public class MyClass {
}
_

(ドキュメントには、「単一の要素を持つ注釈では、要素の名前はvalueである必要があります。これを行う唯一の理由は、@HelloWorld("Hi")パラメータに名前を付ける必要があります。)

記述されているように、注釈は有効なプログラム要素(メソッドや変数宣言を含む)で使用できます。これは _@Target_ アノテーションで変更できます。

最後に、 RetentionPolicy を設定すると、注釈をコンパイラで破棄するか、VMで破棄するか、常に保持するかを決定できます。


興味深い可能性がある2つのパッケージ: javax.annotation および javax.annotation.processing 。そして here は、ソースコード分析に注釈処理を使用する例です。

60
Michael Myers

それは 注釈 インターフェースではないと宣言しています。 Java 1.5。で追加されました。

4
ScArcher2