您的位置:首页 > 其它

通过反射设置Bean对象属性的一个实践

2018-01-02 19:56 453 查看
代码如下:

package bac.fangshe;

import java.lang.reflect.Method;

/**

* @author bac

* 通过反射执行set方法

*/

public class Settertest {

public static void main(String[] args) throws Exception {
Foo foo = new Foo();
setField(foo, "name", Foo.class, String.class,"wjb");
setField(foo, "age", Foo.class, Integer.class,12);
setField(foo, "handsome", Foo.class, Boolean.class, true);
System.out.println(foo.getName());
System.out.println(foo.getAge());
System.out.println(foo.getHandsome());
}

/**
* @Description  通过属性名设置对象中该属性的值
* @author bac
* @version 2018年1月2日 下午7:44:34
* @param object  需要设置属性的对象
* @param fieldName 属性的名称
* @param objectType 需要设置属性的对象的数据类型
* @param fieldType 属性的数据类型
* @param value 属性的值
* @throws Exception
* 补充一下此处用到的泛型知识:
* 此处的泛型的作用是:约束
* 方式声明的第一个 ‘<T>’为使用泛型的声明 ,方法签名中的‘Class<T>’和‘T’配合使用,限制了value参数的类型。
* 即:如果Class<T>为 Interger , 则value必须传入一个Interger的对象
*/
public static <T> void setField(Object object,String fieldName,Class<?> objectType,Class<T> fieldType,T value) throws Exception{
Method m1 = objectType.getMethod("set"+changeFirstCharToUpper(fieldName), fieldType);
m1.invoke(object, value);
}

//将第一个字母转化为大写
private static String changeFirstCharToUpper(String data){
if(data == null || data == ""){
return "";
}
String firstChar = data.substring(0,1);
return firstChar.toUpperCase()+data.substring(1);
}


}

class Foo{

private String name;

private Integer age;

private Boolean handsome;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public Boolean getHandsome() {

return handsome;

}

public void setHandsome(Boolean handsome) {

this.handsome = handsome;

}

}

控制台输出为:

wjb

12

true

写博文时时间有点赶,暂时。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐