通过反射设置Bean对象属性的一个实践
2018-01-02 19:56
453 查看
代码如下:
package bac.fangshe;
import java.lang.reflect.Method;
/**
* @author bac
* 通过反射执行set方法
*/
public class Settertest {
}
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
写博文时时间有点赶,暂时。。。
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
写博文时时间有点赶,暂时。。。
相关文章推荐
- 反射_通过反射写一个通用的设置某个对象的某个属性为指定的值
- 反射(通过反射写一个通用的设置某个对象的某个属性为指定的值)
- 反射-通过反射写一个通用的设置某个对象的某个属性为指定的值
- 反射示例3:写一个方法设置对象任意权限的属性的值
- java通过反射给对象设置属性【工具包系列】
- Java通过反射机制动态设置对象属性值
- 思考一个问题:如何将map里面的值,映射到一个对象里的属性,不通过手动方式设置!!!
- Java循环一个对象的所有属性,并通过反射给这些属性赋值/取值
- 通过反射获取对象属性、属性的值,设置对象属性的值
- 通过反射将一个对象的值赋给另一个对象中对应的属性 不需要用set、get
- java通过反射设置对象私有属性
- Java通过反射机制动态设置对象属性值的方法
- 通过构造函数反射--通过一个对象获取一个完整的包名和类名
- java反射技术通过对象和属性名得到属性值
- 从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?
- Java通过反射获取和设置对象的属性值
- 从头认识Spring-1.7 如何通过属性注入Bean?(1)-如何通过属性向对象注入值?
- C#通过反射获取对象属性,打印所有字段属性的值
- 编写一个文件,读取 src 下面day12包 下面的my.properties 文件,文件内容如下, className=day12.User 结合 IO、反射知识,完成 配置文件中对象的创建和方法调用。并编写方法,列举出 Student 类中所有的属性、
- 利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值