我有一个具有很多属性的对象,每个属性都有 getter 和 setter。每个属性都有一个非原始类型,我在运行时不知道。
比如我的是这样的:
public class a{
private typeA attr1;
private typeB attr2;
public typeA getAttr1(){ return attr1; }
public typeB getAttr2(){ return attr2; }
public void setAttr1(typeA at){ attr1 = at; }
public void setAttr2(typeB at){ attr2 = at; }
}
public class typeA{
public typeA(){
// doesn't matter
}
}
public class typeB{
public typeB(){
// doesn't matter
}
}
因此,使用反射,我获得了属性的 setter 方法。以标准方式设置值是这样的:
a test = new a();
a.setAttr1(new typeA());
但是我如何使用反射来做到这一点呢?我已经使用反射获得了 setAttr1() 方法,但我不知道如何创建一个新的 typeA 对象以插入到 setter 中。
最佳答案
Class<TypeA> cls = TypeA.class;
TypeA typeA = cls.newInstance();
或者,在您必须确定方法参数类型的特定情况下:
Class<?> cls = setterMethod.getParameterTypes()[0];
Object value = cls.newInstance();
setterMethod.invoke(bean, value);
您可以在 Sun tutorial on the subject 中了解有关反射的更多信息.也就是说,类名 ought以大写开头。我已在上面的示例中更正了它。
顺便说一句,您可能会找到提到的工具之一,而不是重新发明 Javabean 反射轮 here也很有用。
关于java - 使用反射将值设置到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2732659/