代码可运行,但是不知道中间过程会不会有不到地方.
存在一个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类.取名为MyJavaBean
2.在类中设置好get,set方法.
3.属性名未知,我可以通过反射获取到所有的字段,把它们放入一个字段数组里.
4,通过遍历,获取到对应的类型和名称,然后再通过构造函数,通过对象然后设置该值.
1>通过遍历,然后再通过fi[x].getName() 获取到此时这个字段的名字.
2>有了字段的名字,就可以获取到对应的字段,然后通过暴力反射使其可以访问和设置.
3>再通过对象和要求的值set;
* */
public class Demo12 {
public static void main(String[] args) throws Exception{
Class clazz = Class.forName("cn.day11.testBean2"); //获取类的字节码.
Object bean = clazz.newInstance(); //创建一个新实例.
Field[] fi = clazz.getDeclaredFields(); //通过字节码获取到所有的Field对象,用数组接受.
ForMethod(fi,clazz,bean);
System.out.println(bean);
}
public static void ForMethod(Field[] fi,Class clazz,Object bean) throws Exception {
for(int x = 0; x < fi.length; x ++) //对Field对象数组进行遍历.
{
String s = fi[x].getType().toString(); //获取他们的字段类型,如果是包装就是类型全名
// System.out.println(s);
String ss = s.subSequence(s.lastIndexOf(".")+1, s.length()).toString(); //此处省略了判断.获取类型字符串
if(ss.equals("boolean") || ss.equals("Boolean")) //用类型字符串进行比较.如果是这个类型,就添加相应的值.
{
Field fiel = clazz.getDeclaredField(fi[x].getName()); //fi[x]获取字段名字,返回的是一个字符串.
fiel.setAccessible(true); //暴力请求.设置允许.
fiel.set(bean, true);
}
else if(ss.equals("String"))
{
Field fiel = clazz.getDeclaredField(fi[x].getName());
fiel.setAccessible(true);
fiel.set(bean, "www.itheima.com");
}
else if(ss.equals("int") || ss.equals("Integer"))
{
Field fiel = clazz.getDeclaredField(fi[x].getName());
fiel.setAccessible(true);
fiel.set(bean,100);
}
else if(ss.equals("double") ||ss.equals("Double"))
{
Field fiel = clazz.getDeclaredField(fi[x].getName());
fiel.setAccessible(true);
fiel.set(bean,0.01D);
}
}
}
}
class testBean2
{
private boolean b;
private Integer i;
private String str;
private double d;
public Boolean getB()
{
return b;
}
public void setB(Boolean b)
{
this.b = b;
}
public Integer getI()
{
return i;
}
public void setI(Integer i)
{ this.i = i;
}
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;
}
@Override
public String toString() {
return "MyJavaBean [boo=" + b + ", i=" + i + ", s=" + str + ", d=" + d
+ "]";
}
|
|