1.常用的注解
@overrive继承//继承的方法时建议都添加该注解,防止我们不是重写方法
@deprecated 废弃的方法
@suppresswarning 警告信息,属性值all表示所有的意思
2.元注解
@target描述注解使用的范围
说明
@target(value=ElementType.值)
属性值:
Package 使用范围包
Type 使用范围类接口枚举annotation类型
Constructor 使用范围构造器
Field 使用范围属性
Method 使用范围方法
Local_VARIABLE 用于局部变量
Parameter 用于描述参数
@retention 描述注解作用的时机
@retention(RetentionPolicy.值)
Source 注解将被编译器丢弃
Class 注解在class文件中可用,但会被VM丢弃
Runtime VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息//需要反射获取某些注解的信息必须添加信息
3.创建注解
public class AnnotationDemo { public static void main(String[] args) { AnnotationDemoTest1 annotationDemo1 = new AnnotationDemoTest1(); Class<? extends AnnotationDemoTest1> class1 = annotationDemo1.getClass(); if (class1.isAnnotationPresent(ReflectAnnotationdemo1.class)) { ReflectAnnotationdemo1 annotation = class1.getAnnotation(ReflectAnnotationdemo1.class); System.out.println(annotation.value()); } } } // RetentionPolicy 枚举 RetentionPolicy.RUNTIME 运行时起作用 这样才能反射 @Retention(RetentionPolicy.RUNTIME) // ElementType 枚举 ElementType.TYPE 修饰于类,接口,枚举,注解 @Target(ElementType.TYPE) @interface ReflectAnnotationdemo1 { // String test() // value可以省略 value= ,省略的前提是只有value一个属性 String value(); } @ReflectAnnotationdemo1("111") class AnnotationDemoTest1 { }
public class AnnotationDemo2 { public static void main(String[] args) { AnnotationDemoTest2 annotationDemo1 = new AnnotationDemoTest2(); Class<? extends AnnotationDemoTest2> class1 = annotationDemo1.getClass(); if (class1.isAnnotationPresent(ReflectAnnotationdemo2.class)) { ReflectAnnotationdemo2 annotation = class1.getAnnotation(ReflectAnnotationdemo2.class); System.out.println(annotation.test()); System.out.println(annotation.test1()[0]); } } } @Retention(RetentionPolicy.RUNTIME) @interface ReflectAnnotationdemo2 { //设置默认的值 String test() default "111"; int [] test1() default {1,2}; } @ReflectAnnotationdemo2 class AnnotationDemoTest2 { }
public class AnnotationDemo3 { public static void main(String[] args) { AnnotationDemoTest3 annotationDemo1 = new AnnotationDemoTest3(); Class<? extends AnnotationDemoTest3> class1 = annotationDemo1.getClass(); if (class1.isAnnotationPresent(ReflectAnnotationdemo3.class)) { ReflectAnnotationdemo3 annotation = class1.getAnnotation(ReflectAnnotationdemo3.class); System.out.println(annotation.test()); System.out.println(annotation.test1()[0]); } } } @Retention(RetentionPolicy.RUNTIME) @interface ReflectAnnotationdemo3 { //设置默认的值 String test() default "111"; int [] test1() default {1,2}; } @ReflectAnnotationdemo3(test="222",test1={4,5}) class AnnotationDemoTest3 { }
原文地址:https://www.cnblogs.com/gg128/p/9311301.html
时间: 2024-10-25 00:29:40