メモ_注釈

2420 ワード

注記(Annotation):
jdk1.5以降の新しい特性は、1つのマークに相当し、プログラムに注釈を付けることはプログラムに何らかのマークをつけることに等しい.つけないことは、あるマークがないことに等しい.その後、javacコンパイラ、開発ツール、その他のプログラムは反射であなたのクラスと各種要素にどんなマークがあるかを知ることができ、あなたがどんなマークを持っているかを見て、相応のことをすることができる.タグは、パッケージ、クラス、フィールド、メソッド、メソッドのパラメータ、およびローカル変数に追加できます.
列挙と注釈は特殊なクラスであり、newでインスタンスオブジェクトを作成することはできません.
一般的な注記:
』SuppressWarnings//警告無視
』Deprecated//タグターゲットは「古い」
』Override//書き換えと表記
注記適用フローチャート:
』目標に注釈があるか否かを判断する方法は以下の通りである:AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class)
」注釈には注釈、すなわち注釈の注釈があり、「メタ注釈」と呼ばれ、注釈に以下の注釈を加えることができる.
@Retention(RetentionPolicy.RUNTIME);
//保存ポリシーの設定
'@RetentionPolicy対応は3つあります:RetetionPolicy.SOURCE、RetetionPolicy.CLASS、RetetionPolicy.RUNTIME
'@Override,@SuppressWarningsのRetentionPolicy属性はRetetionPolicy.SOURCE,@Deprescatedの属性はRetetionPolicy.RUNTIME
'@Targetメタ注釈は、@Target({ElementType.METHOD,ElementType.TYPE})のような注釈の使用場所を限定するために使用されます.
注記のプロパティ:
適用例:
1.注記クラスに属性を追加する:String color();
2.注記を次のように呼び出します:@MyAnnotation(color="red")
3.注記のインスタンス呼び出し時にメソッドを適用して呼び出す
MyAnnotation a =(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(a.color());
」では、属性のデフォルト値を指定します.
String color() default"yellow";
』特殊な属性:value、1つのvalue属性のみを設定する必要がある場合(または他の属性にデフォルト値がある場合)、valueと等号を書かずに直接値を書くことができます.
注記の詳細プロパティ:
』配列タイプの属性
int []arrayAttr() default {1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
配列プロパティに要素が1つしかない場合は、プロパティ値の部分を省略できます.
』列挙タイプの属性
EnumTest.TrafficLamp lamp() ;
@MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
』注記タイプのプロパティ:
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx");
@MyAnnotation(annotationAttr=@MetaAnnotation(“yyy”))
上記@MyAnnotationはMyAnnotationクラスのインスタンスオブジェクトであると考えられ、同様に、上記@MetaAnnotationはMetaAnnotationクラスのインスタンスオブジェクトであり、呼び出しコードは以下の通りであると考えられる.
  MetaAnnotation ma =  myAnnotation.annotationAttr();
  System.out.println(ma.value());
拡張注記コードの例:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface ItcastAnnotation {
	String color() default "blue";
	String value();
	int[] arrayAttr() default {3,4,4};
	EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
	MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");
}