通过反射获取类中的属性,并且将类中的属性名称以及对应的值赋给另一个类中的对象
一、创建一个需要被反射的类
public class Test {
private String name;
private String docementNo;
private String subreportIDs;
private String refID;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDocementNo() {
return docementNo;
}
public void setDocementNo(String docementNo) {
this.docementNo = docementNo;
}
public String getSubreportIDs() {
return subreportIDs;
}
public void setSubreportIDs(String subreportIDs) {
this.subreportIDs = subreportIDs;
}
public String getRefID() {
return refID;
}
public void setRefID(String refID) {
this.refID = refID;
}
}
二、 创建一个希望反射中将名称和值赋给的类
public class Item {
private String name;
private String value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "Item [name=" + name + ", value=" + value + "]";
}
三、 反射对应函数
public static List<Item> getProperty(Object entityName) throws Exception{
List<Item> list = new ArrayList<>();
Class c = entityName.getClass();
Field field[] = c.getDeclaredFields();
for(Field f:field){
Item item = new Item();
Object v = invokeMethod(entityName,f.getName(),null);
item.setName(f.getName());
item.setValue(v.toString());
list.add(item);
System.out.println(f.getName() + "\t" + v + "\t" + f.getType());
}
return list;
}
private static Object invokeMethod(Object owner, String methodName,
Object[] args) throws Exception{
Class ownerClass = owner.getClass();
System.out.println("methodName=="+methodName);
methodName = methodName.substring(0, 1).toUpperCase()
+ methodName.substring(1);
Method method = null;
try {
method = ownerClass.getMethod("get" + methodName);
} catch (SecurityException e) {
} catch (NoSuchMethodException e) {
return " can't find 'get" + methodName + "' method";
}
return method.invoke(owner);
}
四、 调用
Test test = new Test();
test.setName("222");
test.setDocementNo("3333");
test.setSubreportIDs("4444");
test.setRefID("5555");
List<Item> list = getProperty(test);
五、 结果