我创建了一个反射函数来创建一个新对象并在其中设置数据。
这是我的代码,但是,我不知道如何填充对象声明类类型:
<Class-Type> newObj = f.getType().getConstructor(new Class[]{}).newInstance();
f是我从class.getDeclaredFields()获得的java.lang.reflect.Field
我已经尝试使用对象类型
Object newObj = f.getType().getConstructor(new Class[]{}).newInstance();
但是在我调用数据之后
Method setterNewObj =newObj.getClass().getDeclaredMethod("set" + Character.toUpperCase(m.getName().charAt(0))+ m.getName().substring(1), m.getType());
setterNewObj.invoke(newObj, this.typeConvert(mapOfValue.get(nameOfColumn), m.getType()));
并且我print.out结果数据未设置(空);
谢谢
答案 0 :(得分:0)
从我们可以看到,您的代码没有错。
也许您需要提供更完整的代码示例或您所做工作的一些额外信息,以便我们进行检查。
我创建了一小段代码(完整且可运行)以向您展示其工作原理:
import java.lang.reflect.Field;
import java.lang.reflect.Method;
class Buddy {
String name;
Buddy buddy;
public Buddy() {}
public Buddy(String n) {
this();
name = n;
}
public void setBuddy(Buddy b) {
if (this.buddy != null)
this.buddy.buddy = null;
this.buddy = b;
b.buddy = this;
}
public void setName(String name) {
this.name = name;
}
private String getInfo() {
return name;
}
public void display() {
if (buddy != null)
System.out.println(this.getInfo() +" & "+ buddy.getInfo());
else
System.out.println(this.getInfo());
}
public static void main(String args[]) {
Buddy s1 = new Buddy("Rick");
s1.display();
System.out.println("\nNeeds his buddy 'Morty' :");
Buddy s2 = new Buddy("Morty");
s1.setBuddy(s2);
s1.display();
s2.display();
System.out.println("\nChange to new buddy 'Roller':");
try {
// Get the buddy field
Field f = s1.getClass().getDeclaredField("buddy");
// Create a new Buddy instance
Object newObj = f.getType().getConstructor(new Class[]{}).newInstance();
// Get the name field
Field m = newObj.getClass().getDeclaredField("name");
// Get the setter for the name field
Method setterNewObj = newObj.getClass().getDeclaredMethod("set" + Character.toUpperCase(m.getName().charAt(0))+ m.getName().substring(1), m.getType());
// Invoke the setter for the name field with a value
setterNewObj.invoke(newObj, "Roller");
// Get the setter for the buddy field
Method setterS1 = s1.getClass().getDeclaredMethod("set" + Character.toUpperCase(f.getName().charAt(0))+ f.getName().substring(1), f.getType());
// Invoke the setter for the buddy field with the new Buddy instance
setterS1.invoke(s1, newObj);
} catch (Exception e) {
e.printStackTrace();
}
s1.display();
s2.display();
}
}
您会看到打印新创建的伙伴,而旧伙伴仍然存在:
里克
需要他的好友“ Morty”:
瑞克和莫蒂
莫蒂和里克更改为新的好友“ Roller”:
瑞克与罗勒
莫蒂