注解是什麼?
注解是一種語言形式而已,類似於接口、枚舉這些語言形式。
package test.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import test.TestEnum;
/**
* 注解示例
* @author liujl
*
*/
@Target({ElementType.METHOD,ElementType.TYPE})//可以寫在方法上,也可以寫在類上
@Retention(RetentionPolicy.CLASS) //注解性質,保留到運行期。.java-->javac-->.class--java-->類裝載器裝載-->進入"運行期"
public @interface ITCastAnnotation {
String color() default "blue";//注解屬性類型--字符串類型
String value();//一個特殊的注解屬性類型,可以默認不寫
int[] arrayAttr() default {1,2,3};//注解屬性類型--數組類型
TestEnum.Triffic lamp() default TestEnum.Triffic.RED;
MetaAnnotation annotationAttr() default @MetaAnnotation("lhm");//注解屬性類型--注解類型
Class clazz() default String.class;//注解屬性類型--Class類型
}
package test.annotation;
@ITCastAnnotation(annotationAttr=@MetaAnnotation(value="fxx") ,value="111",arrayAttr={2,3,4})
public class AnnotationTest {
public static void main(String[] args)throws Exception {
System.runFinalizersOnExit(true);
if(AnnotationTest.class.isAnnotationPresent(ITCastAnnotation.class))
{
ITCastAnnotation ia=AnnotationTest.class.getAnnotation(ITCastAnnotation.class);
System.out.println(ia.value());
System.out.println(ia.color());
int[] arrayAttr=ia.arrayAttr();
for(Integer i:arrayAttr){
System.out.print(i+" ");
}
System.out.println();
System.out.println(ia.lamp().nextDeng());
System.out.println(ia.annotationAttr().value());
System.out.println(ia.clazz());
}
}
}
package test;
public class TestEnum {
public static void main(String[] args) {
Triffic tr=Triffic.GREEN;
System.out.println(tr+" 下一個燈是: "+tr.nextDeng());
}
public enum Triffic{
RED (400){
@Override
public Triffic nextDeng() {
return GREEN;
}
},
GREEN (200){
@Override
public Triffic nextDeng() {
return YELLOW;
}
},
YELLOW(10) {
@Override
public Triffic nextDeng() {
return RED;
}
};
public abstract Triffic nextDeng();
int time;
private Triffic(int time){
this.time=time;
}
public int getTime() {
return time;
}
public String toString(){
return this.name()+":"+this.time;
}
}
}
package test.annotation;
/**
* 定義一個元注解
* @author liujl
*
*/
public @interface MetaAnnotation {
String value();
}
111
blue
2 3 4
GREEN:200
fxx
class java.lang.String