package com.itheima;
/*
黑马的入学测试题其中一道,做了2,3个小时。还是练习题做的太少,没有思路。
8、 存在一个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属性不设置,请用代码实现
*/
import java.beans.*;
import java.lang.reflect.*;
public class Test8 {
public static void main(String[] args) throws Exception
{
//获取测试类的字节码
Class<JavaBean> clazz =JavaBean.class;
//通过字节码获取对象
Object bean = clazz.newInstance();
//内省测试类,获取javaBean的属性信息
BeanInfo info = Introspector.getBeanInfo(clazz);
//获取把javaBean属性数组
PropertyDescriptor[] pds = info.getPropertyDescriptors();
//for迭代每个具体的属性
for(PropertyDescriptor pd : pds){
//获取属性名
Object name = pd.getName();
//获取属性类型
Object type = pd.getPropertyType();
//获取get方法
Method getMethod = pd.getReadMethod();
//获取set方法
Method setMethod = pd.getWriteMethod();
//因为测试类是一个本类所以要去除它
if(!"class".equals(name)){
//调用修改前的属性
if(getMethod!=null)
System.out.println("修改前:"+getMethod.invoke(bean, null));
//修改各种属性
if(type==String.class)
setMethod.invoke(bean, "www.itheima.com");
else if(type==boolean.class)
setMethod.invoke(bean, true);
else if (type==double.class)
setMethod.invoke(bean, 0.01D);
else if(type==int.class)
setMethod.invoke(bean, 100);
//调用修改后的属性
if(getMethod!=null)
System.out.println("修改后:"+getMethod.invoke(bean, null));
}
}
}
}
//测试的类
class JavaBean{
private boolean flag;
private int x;
private String str;
private char[] ch;
private long l;
private double d;
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public double getD() {
return d;
}
public void setD(double d) {
this.d = d;
}
public void show(long l)
{
this.l = l;
System.out.println("http://www.itheima.com");
}
}
|
|