今天我也来写写JavaBean属性值动态设置。
设计了一类,类里面有上百个属性,如果一个一个设置的话,那就要上百个if判断太累了,难道没有什么好的方法循环判断吗?
于是从网上搜了搜,果然有哦,不过说的是在jsp里通过Property.setProperty,不是我需要的,接着搜。半天没有结果,不过还好有一个同学在网上发了一个问题说是两个bean拷贝的时候有问题。。。。
看看,太好了里面竟然有bean的字段设置。god~~
改了改测试一下,竟然可以哦~~
下面代码呈上~~
public class TestBean { public String name; public int age; public String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
import java.lang.reflect.Field; import java.util.ArrayList; public class TestReflet { public static void main(String[] args) { try { TestBean bean = new TestBean(); Class clas = Class.forName(bean.getClass().getName()); if (!(clas.isInstance(bean))) { System.out.println("传入的java实例与配置的java对象类型不符!"); return; } Field[] fields = clas.getDeclaredFields(); ArrayList<String> fieldsNameList = new ArrayList<String>(); int i = 0; for (Field field : fields) { fieldsNameList.add(field.getName()); } setBeanValue(bean, fields, fieldsNameList, "age", 20); setBeanValue(bean, fields, fieldsNameList, "name", "Shane"); setBeanValue(bean, fields, fieldsNameList, "sex", "boy"); System.out.println("Age:" + bean.getAge() + "\n" + "Name:" + bean.getName() + "\n" + "Sex:" + bean.getSex() + "\n"); } catch (Exception e) { e.printStackTrace(); } } public static void setBeanValue(Object destObj, Field[] fields, ArrayList<String> fieldsNameList, String strKey, Object objValue) throws IllegalArgumentException, IllegalAccessException { int intIndex = fieldsNameList.indexOf(strKey); if (intIndex >= 0) { fields[intIndex].set(destObj, objValue); } } }