张孝祥高薪技术3(内省,注解)

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

 

1 内省综合案例
public static void main(String[] args) throws Exception {
  // TODO Auto-generated method stub
  ReflectPoint  pt1 = new ReflectPoint(6, 5);
  
  String propertyName = "x";
  //得到这个类的特性
  Object retVal = getProperty(pt1, propertyName);//获取get
  System.out.println(retVal);
  
  Object value = 45;
  setProperty(pt1, propertyName, value);//获取set
  System.out.println(pt1.getX());

 }

 private static void setProperty(Object pt1, String propertyName,
   Object o) throws IntrospectionException, IllegalAccessException,
   InvocationTargetException {
  //propertyDescriptor:描述类(这个类是有JavaBean类的特点)中的属性的类
  PropertyDescriptor pro = new PropertyDescriptor(propertyName, pt1.getClass());
  //取得这个属性的set的方法
  Method methodSetX = pro.getWriteMethod();
  methodSetX.invoke( pt1,o );
 }

 private static Object getProperty(Object pt1, String propertyName)
   throws IntrospectionException, IllegalAccessException,
   InvocationTargetException {
  PropertyDescriptor pro = new PropertyDescriptor(propertyName, pt1.getClass());
  Method methodGetX = pro.getReadMethod();
  Object retVal =  methodGetX.invoke(pt1);
  return retVal;
 }
学会了内省的方法,反射的应用,重构的设置
注意:
    只要调用这个方法,并给这个方法传递了一个对象、属性名和设置值,它就能完成属性修改的功能。
得到BeanInfo最好采用“obj.getClass()”方式,而不要采用“类名.class”方式,这样程序更通用。


2 java提供的几个基本注解
   注解相当于一种标记,在程序中加了注解就等于为程序打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事。标记可以加在包,类,字段,方法,方法的参数以及局部变量上
   JDK中提供的最基本的annotation:
        @SuppressWarnings: 指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。
        @Deprecate: 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。
        @Override:  表示一个方法声明打算重写超类中的另一个方法声明。如果方法利用此注释类型进行注解但没有重写超类方法,则编译器会生成一条错误消息。

    注解的应用结构
               @Retention:元注解                      @A
        注解类:@interface A{}---->应用了"注解类"的类Class B{}
 ---> Class C{
   B.class.isAnnotionPresent( A.class);         
   A a = B.class.getAnnotion(A.class);
             }
        元注解以及其枚举属性值不用记,只要会看jdk提供那几个基本注解的API帮助文档的定义或其源代码,按图索骥即可查到,或者直接看java.lang.annotation包下面的类。

3 为注解增加高级属性
数组类型的属性
int [] arrayAttr() default {1,2,3};
@MyAnnotation(arrayAttr={2,3,4})
如果数组属性中只有一个元素,这时候属性值部分可以省略大括
枚举类型的属性
EnumTest.TrafficLamp lamp() ;

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值