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

代码如下:
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

写博文时时间有点赶,暂时。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值