一、Annotation工作方式
从Java5.0版本发布以来,5.0平台提供了一个正式的annotation功能:允许开发者定义、使用自己的annotation类型。
此功能由一个定义annotation类型的语法和一个描述annotation声明的语法,读取annotation的API,一个使用annotation
修饰的class文件,一个annotation处理工具(apt)组成。
annotation并不直接影响代码语义,但是它能够工作的方式被看做类似程序的工具或者类库
它会反过来对正在运行的程序语义有所影响。 annotation可以从原文件、class文件或者以运行时反射的多种方式读取。
二、Java注解
1、Override注解
表示子类要重写(override)父类的对应方法
java.lang.Override是个Marker annotation,用户标识的Annotation,Annotation名称本身即表示了要给工具程序的信息
2、 Deprecated注解
表示方法是不建议被使用的。
3、SuppressWarning注解
表示抑制警告
三、自定义注解
1.定义一个注解
public @interface AnnotationTest { //属性value String value(); }
使用注解
@AnnotationTest("hello") public class AnnotationUsage { @AnnotationTest("world") public void method() { System.out.println("usage of annotation"); } public static void main(String[] args) { AnnotationUsage usage = new AnnotationUsage(); usage.method(); } }
2、 给注解增加默认值和枚举值
public @interface AnnotationTest { //属性value,default设置默认值 String value() default "hello"; EnumTest value2(); } enum EnumTest{ Hello, World, Welcome; }
使用注解
@AnnotationTest(value2 = EnumTest.Welcome) public class AnnotationUsage { @AnnotationTest(value="world", value2 = EnumTest.World) public void method() { System.out.println("usage of annotation"); } public static void main(String[] args) { AnnotationUsage usage = new AnnotationUsage(); usage.method(); } }
三、注解的调用
1、创建注解
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String hello() default "tom"; String world(); }
2、在类和方法中使用注解
@MyAnnotation(hello="beijing", world="shanghai") public class MyTest { @MyAnnotation(hello="hangzhou", world="xihu") @Deprecated @SuppressWarnings("unchecked") public void output() { System.out.println("output something"); } }
3、使用反射测试
public class MyReflection { public static void main(String[] args) throws Exception { MyTest myTest = new MyTest(); Class<MyTest> c = MyTest.class; Method method = c.getMethod("output", new Class[]{}); if(method.isAnnotationPresent(MyAnnotation.class)){ method.invoke(myTest, new Object[]{}); MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class); String hello = myAnnotation.hello(); String world = myAnnotation.world(); System.out.println(hello + ", " + world); } Annotation[] annotations = method.getAnnotations(); for(Annotation annotation : annotations){ System.out.println(annotation.annotationType().getName()); } } }
输出结果
output something hangzhou, xihu com.example.annotation.MyAnnotation java.lang.Deprecated
四、Target的使用
1、定义一个注解,target为方法,只能被方法使用
@Target(ElementType.METHOD) public @interface MyTarget { String value(); }
2.使用
如上图,类中使用该注解就会报错。
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!