一道javaBean内省题
来源:互联网 发布:统计联网直报平台数据 编辑:程序博客网 时间:2024/06/05 15:09
/** * 存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 * * *思路:内省 *1、操作的是JavaBean属性,不访问非JavaBean属性,那么就要拿到所有JavaBean属性的描述器:先Introspector.getBeanInfo,通过该类的字节码拿到BeanInfo *然后用BeanInfo拿到所有JavaBean属性的描述器 *2、对所有JavaBean属性的描述器进行迭代,在迭代中,拿到属性的设置方法,对当前属性进行判断,对对应的属性进行设置。 * * */
public static void main(String[] args) throws Exception { MyBean mb = new MyBean(); Class<MyBean> beanClass = MyBean.class;//根据名字拿到Class对象 BeanInfo bif = Introspector.getBeanInfo(beanClass,Object.class);//获得javaBean类的bean信息 PropertyDescriptor[] pds = bif.getPropertyDescriptors();//获得javaBean类中所有JavaBean属性的描述器 for(PropertyDescriptor pd : pds)//对所有JavaBean属性进行迭代 { Method setX = pd.getWriteMethod();//拿到当前迭代的属性的set方法 Class xType = pd.getPropertyType();//拿到当前迭代的属性的类型 if(xType==String.class)//如果该属性是字符串类型 { setX.invoke(mb, "www.itheima.com"); } else if (xType==int.class || xType==Integer.class)//如果是int或Integer类型 { setX.invoke(mb, 100); } else if (xType==double.class || xType==Double.class)//如果是double/Double类型 { setX.invoke(mb, 0.01D); } else if (xType==boolean.class || xType==Boolean.class)//如果是boolean/Boolean类型 { setX.invoke(mb, true); } } /* //查看设置的结果 System.out.println(mb.getWebSite()); System.out.println(mb.getNum()); System.out.println(mb.getPay()); System.out.println(mb.isFlag());*/ }
扩展:(待续)
1、如果连类名都不知道,要等待外方输入,怎么写这个方法?
2、不采用内省的方式,用暴力反射怎么做?
0 0
- 一道javaBean内省题
- JavaBean内省
- 内省 javaBean
- JavaBean内省
- JavaBean内省
- javaBean内省
- javabean内省
- 内省 JavaBean
- javaBean 内省
- javaBean的内省机制
- javaBean之内省
- 内省->了解JavaBean
- 内省-----》javabean,以及BeanUtils
- 由内省引出JAVABean
- Java 内省、JavaBean、BeanUtils
- Java 内省、JavaBean、BeanUtils
- 内省操作JavaBean
- 黑马程序员---内省JavaBean
- myEclipse8.5 破解方法
- &引用和&取地址
- COPY innodb存储引擎索引概述
- 为啥要重写equals()和hashcode()方法
- C#中如何操作XML,对XML进行增、删、改节点
- 一道javaBean内省题
- 采购订单邮件发送预警设置
- C语言_辗转相除法求最大公约数
- php字符串学习之substr()
- wcdma手机开机选网到成功的一个信令
- Java集合之Collection
- leetcode 题解 || Implement strStr() 问题 (即 KMP 算法实现)
- Python:使用threading模块实现多线程
- iOS 状态栏隐藏与显示总结