Java结合注解与反射使用的简单入门
1.创建注解
就拿吾项目里的一个注解来解释:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Skin {
String name()default "NULL";
String parent()default "NULL";
}
@Target(ElementType.TYPE) 这个注解是说明该注解的作用范围是方法,类还是字段等,这里吾指定这个注解是用于类的。
@Retention(RetentionPolicy.RUNTIME) 这个注解是说明该注解的作用阶段是编译阶段,加载阶段还是运行阶段,这里这个注解吾是用于动态加载的,所以定义为运行时存在。
@interface是注解类的定义,有它编译器才知道这个类是个注解(注意:注解属于类型而不是注释)
String name()default "NULL";这个是定义了该注解的内容name,返回值是String,使用默认值关键字default定义默认值为“NULL”,内容的本质其实就是方法。
2.获得注解并获得注解的内容
也是一个简单的例子:
Map<String,Class<?>>classMap=skinClassScanner.getClasses();//这里的skinClassScanner是一个用于快速获得指定路径所有的类的工具类。
ArrayList<Class<?>>classes=new ArrayList<>();
for (Class<?>cla:classMap.values()){
if (cla.getAnnotation(cn.korostudio.shouhoupet.pet.loader.Skin.class)!=null){
classes.add(cla);
logger.info("Found Skin:Pet="+ ((cn.korostudio.shouhoupet.pet.loader.Skin)cla.getAnnotation(cn.korostudio.shouhoupet.pet.loader.Skin.class)).parent()+" Name="+((cn.korostudio.shouhoupet.pet.loader.Skin)cla.getAnnotation(cn.korostudio.shouhoupet.pet.loader.Skin.class)).name());
}
}
可以发现,对注解的操作其实和操作对象相似,可以通过Class.getAnnotation(Class
到这里,注解的基本操作就介绍完了。
Q.E.D.