关于枚举、反射、内省的总结

       对于jdk1.5之后追加的一些技术,有相当多的一些部分是为做框架用的,在初识这些技术后觉得有必要对此做下总结。 

         枚举简而言之就是一种限制传指定对象的特殊类,其也相当于在该类的构造函数中定义了某些final,static的该类对象,枚举有自己的构造函数,字段,方法。当枚举中只传入一个对象时,也就相当于所谓的单实例模式。以简单的定义枚举People类为例。 
             enum people{ a(1) ,b(2); 
                            int a; 
                            private people(int a){ this.a=a; } 
                            public int geta(){ return a; } }
这样可通过以下代码测试: 
                   People po[]=People.values(); 
                   for(People po:pe){System.out.println (po.geta())};
输出结果为:1,2
另外对于枚举类的构造器必须为私有,这样才会体现枚举的意义所在。 
      反射可以说是整个javase的精髓所在,其很好的体现了面向对象的思想,一般用于加载类,解剖类的各个字节流,大多用在做框架时引用该类的字段,属性,方法。
以解析类的字段为例:Class c=Class.forName("cn.test.reflect.Person");//加载类
                                   Constructor co =c.getConstructor(String.class);//得到构造器
                                   Person p= (Person) co.newInstance("a")  ;//构造实例
通过反射可以把类的字段,构造器,方法都以对象的形式表现出来,不禁感慨在java整个系统中,万物皆对象。 
     内省是个与反射较相似的技术,一般作用于javabean类的信息提取与修改。提到javabean不得不吐槽下字段与属性的区别,字段是指一个类定义的全局变量,而属性是指该类具体能通过getXX()方法得到的变量,所以任何一个类都有一个默认的属性:getclass().还是以Javabean类People为例,有age ,name等属性。 
      BeanInfo be=Introspector.getBeanInfo(People.class,Object.class); //得到给Javabean的BeanInfo信息 
      PropertyDescriptor[] po=  be.getPropertyDescriptors();//得到属性描述器 
      for(  PropertyDescriptor pr:po){
               System.out.println(pr.getName())};//遍历该JavaBean的属性
也可对JavaBean的各个属性值进行读取与修改 
   PropertyDescriptor pr=new PropertyDescriptor("age", People.class);//得到该JavaBean age属性的描述器 
   Method me= pr.getWriteMethod();//得到修改值的方法 
   People p=new People(); 
   me.invoke(p, 23);// 将上面对象的年龄改为23 
       当然,这只是这些技术的冰山一角,总之还是那句话 ,在java里,万物皆对象。




 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值