您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第16章:Annotation】_反射与Annotation
发布时间:2021-01-08 17:10:23编辑:雪饮阅读()
通过反射获取annotation
定义一个用于反射的类:
SimpleBeanOne.java
package org.kasumi;
public class SimpleBeanOne{
@SuppressWarnings("unchecked")
@Deprecated
@Override
public String toString(){
return "hello kasumi";
}
}
用反射获取目标类中annotation
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
class Person{}
public class Hello{
public static void main(String args[]) throws Exception{
Class <?> c=Class.forName("org.kasumi.SimpleBeanOne");
Method tom=c.getMethod("toString");
Annotation an[]=tom.getAnnotations();
for(Annotation a:an){
System.out.println(a);
}
}
};
用反射获取一个类中所使用的自定义Annotation接口的annotation
自定义Annotation,MyAnnotation.java:
package org.kasumi;
import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
@Retention(value=RetentionPolicy.RUNTIME)
public @interface MyAnnotation{
public String key() default "kasumi";
public String value() default "霞";
}
目标类SimpleBeanOne.java:
package org.kasumi;
public class SimpleBeanOne{
@SuppressWarnings("unchecked")
@Deprecated
@Override
@MyAnnotation(key="momiji",value="红叶")
public String toString(){
return "hello kasumi";
}
}
用反射获取目标类使用的自定义Annotation接口的annotation
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
class Person{}
public class Hello{
public static void main(String args[]) throws Exception{
Class <?> c=Class.forName("org.kasumi.SimpleBeanOne");
Method tom=c.getMethod("toString");
Annotation an[]=tom.getAnnotations();
for(Annotation a:an){
System.out.println(a);
}
}
};
D:\>javac -d . MyAnnotation.java
D:\>javac -d . SimpleBeanOne.java
D:\>javac Hello.java
D:\>java Hello
@java.lang.Deprecated()
@org.kasumi.MyAnnotation(value=红叶, key=momiji)
获取指定Annotation接口
上面输出的annotation信息中包含有系统内置的annotation以及我们自定义的annotation
可以通过annotation接口类利用反射来指定获取某个自定义annotation接口的annotation信息
所以上面其它地方的代码都不需要动,只需要修改下调用反射去获取目标类的annotation信息的java文件即可:
import org.kasumi.MyAnnotation;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
class Person{}
public class Hello{
public static void main(String args[]) throws Exception{
Class <?> c=Class.forName("org.kasumi.SimpleBeanOne");
Method tom=c.getMethod("toString");
if(tom.isAnnotationPresent(MyAnnotation.class)){
MyAnnotation mda=tom.getAnnotation(MyAnnotation.class);
String key=mda.key();
String value=mda.value();
System.out.println("key="+key);
System.out.println("value="+value);
}
}
};
D:\>javac -d . MyAnnotation.java
D:\>javac -d . SimpleBeanOne.java
D:\>javac Hello.java
D:\>java Hello
key=momiji
value=红叶
关键字词:java,反射,Annotation