注解是什麼?
注解是一種語言形式而已,類似於接口、枚舉這些語言形式。
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