本篇介绍利用反射给对象赋值
方法1 获得并使用默认构造器创建类的对象 并对对象赋值
这里类用的是Person类 属性有 id ,name ,address 来做例子
public class Person {
private Integer id;
private String name;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
StringBuilder bd=new StringBuilder();
bd.append("person ");
bd.append("[id="+id+", name="+name+",address="+address+"]");
return bd.toString();
}
public Person() {
super();
}
public Person(Integer id, String name, String address) {
super();
this.id = id;
this.name = name;
this.address = address;
}
}
代码如下:
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Class<?> class1 = Class.forName("reflectStdent.Person");
//获得构造器
Constructor<?> constructor = class1.getDeclaredConstructor(new Class[] {});
//根据类的默认构造器来获得一个对象
Object instance = constructor.newInstance(new Object[] {});
System.out.println(instance);
Method[] methods=class1.getDeclaredMethods();
for(Method m:methods) {
//获得方法名字
String name =m.getName();
boolean startsWith=name.startsWith("set");
if(startsWith) {
//获得到了set字符串的后面的值
String fieldName=name.substring(3);
//获得属性的名字
fieldName=fieldName.substring(0,1).toLowerCase()+fieldName.substring(1);
Field field = class1.getDeclaredField(fieldName);
//获得属性的具体类型
Class<?> type = field.getType();
if(type==Integer.class) {
m.invoke(instance, new Object[] {1});
}
if(type==String.class&&fieldName.equals("address")) {
m.invoke(instance, new Object[] {"北京"});
}
if(type==String.class&&fieldName.equals("name"))
m.invoke(instance, new Object[] {"李四"});
}
}
System.out.println(instance);
}
方法2 获得并使用Person的带参构造器 创建对象 并赋值
Constructor<?> constructor1 = class1.getDeclaredConstructor(new Class[] {Integer.class,String.class,String.class});
Object instance1 = constructor1.newInstance(new Object[] {1,"李四","北京"});
System.out.println(instance1);
喜欢博主的给个支持 刷个评论 谢谢拉