首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java从入门到精粹 - 反射Annotation

2012-10-21 
java从入门到精髓 - 反射Annotation!--br/ /br/ /Code highlighting produced by Actipro CodeHighli

java从入门到精髓 - 反射Annotation

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->import?java.lang.annotation.*;
@Target(ElementType.CONSTRUCTOR)???//用于构造方法
@Retention(RetentionPolicy.RUNTIME)?//在运行时加载到Annotation到JVM中
public?@interface?Constructor_Annotation?{
????String?value()?default?"默认构造方法";????//定义一个具有默认值的String型成员
}

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->import?java.lang.annotation.*;
@Target({ElementType.FIELD,ElementType.METHOD,ElementType.PARAMETER})???//用于字段,方法,参数
@Retention(RetentionPolicy.RUNTIME)?//在运行时加载到Annotation到JVM中
public?@interface?Field_Method_Parameter_Annotation?{
????Class?type()?default?void.class;??//定义一个具有默认值的Class型成员
????String?describ();????//定义一个没有默认值的String成员
}

?

?

<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->
import?java.lang.annotation.Annotation;
import?java.lang.reflect.Constructor;
import?java.lang.reflect.Field;
import?java.lang.reflect.Method;

public?class?AnnotationTest?{

????@Field_Method_Parameter_Annotation(describ="字段编号",type=int.class)??//注释字段
????int?id;
????@Field_Method_Parameter_Annotation(describ="字段姓名",type=String.class)//注释字段
????String?name;
????
????@Constructor_Annotation()//采用默认构造方法
????public?AnnotationTest()
????{
????????
????}
????@Constructor_Annotation("立即初始化构造方法.")????//注释构造方法
????public?AnnotationTest(
????//注释构造方法参数
????@Field_Method_Parameter_Annotation(describ="编号",type=int.class)
????int?id,
????@Field_Method_Parameter_Annotation(describ="姓名",type=String.class)
????String?name
????)
????{
????????this.id?=?id;
????????this.name?=?name;
????}
????
????@Field_Method_Parameter_Annotation(describ="获得编号",type=int.class)
????public?int?getId()
????{
????????return?id;
????}
????@Field_Method_Parameter_Annotation(describ="设置编号")???//成员type,采用默认注释方法
????public?void?setId(
????//注释参数
????@Field_Method_Parameter_Annotation(describ="设置编号",type=int.class)
????int?id
????)
????{
????????this.id?=id;
????}
????@Field_Method_Parameter_Annotation(describ="获得姓名",type=String.class)
????public?String?getName()
????{
????????return?name;
????}
????@Field_Method_Parameter_Annotation(describ="设置姓名")
????public?void?setName(
????@Field_Method_Parameter_Annotation(describ="姓名",type=String.class)
????String?name
????)
????{
????????this.name?=?name;
????}
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????//构造方法:
????????Constructor[]?declaredConstructor?=?AnnotationTest.class.getDeclaredConstructors();??//获得所有的构造方法
????????for(int?i=0;i<declaredConstructor.length;i++)
????????{
????????????Constructor??constructor?=?declaredConstructor[i];???//遍历构造方法
????????????if(constructor.isAnnotationPresent(Constructor_Annotation.class))???//查看是否指定类型的注释
????????????{
????????????Constructor_Annotation?ca?=?(Constructor_Annotation)constructor.getAnnotation(Constructor_Annotation.class);
????????????System.out.println("ca.value()=:?"+ca.value());
????????????}
????????
????????????Annotation[][]parameterAnnotations?=?constructor.getParameterAnnotations();//获得参数注释?
????????????for(int?j=0;j<parameterAnnotations.length;j++)
????????????{
????????????????int?length?=?parameterAnnotations[j].length;
????????????????if(length?==?0)???//如果为0,则表示没有为该参数添加注释
????????????????{
????????????????????System.out.println("没有为该参数添加注释");
????????????????}
????????????????else
????????????????{
????????????????????for(int?k=0;k<length;k++)
????????????????????{
????????????????????????//获得参数注释
????????????????????????Field_Method_Parameter_Annotation?pa?=?(Field_Method_Parameter_Annotation)parameterAnnotations[j][k];
????????????????????????System.out.print("?"+pa.describ());???//参数描述
????????????????????????System.out.println("?"+pa.type());??????//参数类型
????????????????????}
????????????????}
????????????}
????????????System.out.println("****************");
????????}
????????
????????
????????//字段:
????????System.out.println("********字段的Annotation*************");
????????Field[]?declaredFields?=?AnnotationTest.class.getDeclaredFields();???//获得所有的字段
????????for(int?i=0;i<declaredFields.length;i++)
????????{
????????????Field?field?=?declaredFields[i];
????????????//查看是否具有指定类型的注释:
????????????if(field.isAnnotationPresent(Field_Method_Parameter_Annotation.class))
????????????{
????????????????Field_Method_Parameter_Annotation?fa?=?(Field_Method_Parameter_Annotation)field.getAnnotation(Field_Method_Parameter_Annotation.class);
????????????????System.out.print("?"+fa.describ());???//获得字段描述
????????????????System.out.println("?"+fa.type());????//获得字段类型
????????????}
????????}
????????
????????//方法
????????System.out.println("********方法的Annotation*************");
????????Method?[]?methods?=?AnnotationTest.class.getDeclaredMethods();????//获得所有的方法
????????for(int?i=0;i<methods.length;i++)
????????{
????????????Method?method?=?methods[i];
????????????//查看是否指定注释:
????????????if(method.isAnnotationPresent(Field_Method_Parameter_Annotation.class))??
????????????????
????????????{
????????????????Field_Method_Parameter_Annotation?ma?=?(Field_Method_Parameter_Annotation)method.getAnnotation(Field_Method_Parameter_Annotation.class);
????????????????System.out.print("?"+ma.describ());???//获得方法描述
????????????????System.out.println("?"+ma.type());????//获得方法类型
????????????}
????????
????????????Annotation[][]parameterAnnotations?=?method.getParameterAnnotations();????//获得所有参数
????????????for(int?j=0;j<parameterAnnotations.length;j++)
????????????{
????????????????int?length?=?parameterAnnotations[j].length;?
????????????????if(length==0)
????????????????{
????????????????????System.out.println("没有添加Annotation参数");
????????????????}
????????????????else
????????????????{
????????????????????for(int?k=0;k<length;k++)
????????????????????{
????????????????????????//获得指定的注释:
????????????????????????Field_Method_Parameter_Annotation?pa?=?(Field_Method_Parameter_Annotation)parameterAnnotations[j][k];
????????????????????????System.out.print("?"+pa.describ());???//获得参数描述
????????????????????????System.out.println("?"+pa.type());????//获得参数类型
????????????????????}
????????????????}
????????????}
????????????System.out.println("********************");
????????????
????????}
????}

}

热点排行