标签:cti rgba sof 编译 microsoft 枚举类 except void png
用一个简单例子,做一下自定义注解:
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * * */ @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { public String hello() default "lzyer"; public String world(); }
Retention:表示注解保留时间和注释类型是否被保留,如果没有Retention注解的声明,是默认的RetentionPolicy.CLASS.
从API文档中可以知道RententionPolicy是枚举类型,取值可以为CLASS,RUNTIME,SOURCE.
CLASS:表示的是这种注解在编译时,会保存在.class文件中,JVM在运行时不会被保存
RUNTIME:表示在编译时这种注解会保存在.class文件中,在运行时保存在JVM中,因此可以通过反射的方式调用。
SOURCE:表示在编译的时候该注解会被丢弃。
测试类:
@MyAnnotation(hello = "beijing", world = "shanghai") public class MyTest { @MyAnnotation(hello="hunan", world="changsha") @Deprecated @SuppressWarnings("unchecked") public void print() { System.out.println("hello world"); } }
反射测试类:
import java.lang.annotation.Annotation; import java.lang.reflect.Method; public class Myflection { public static void main(String[] args)throws Exception { MyTest myTest = new MyTest(); Class<MyTest> classType = MyTest.class; Method method = classType.getMethod("print", new Class[]{}); //查看某个方法是否存在该注解 if(method.isAnnotationPresent(MyAnnotation.class)) { 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 a : annotations) { System.out.println(a); } } }
结果:
标签:cti rgba sof 编译 microsoft 枚举类 except void png
原文地址:https://www.cnblogs.com/shuilangyizu/p/14944892.html