我尝试使用此代码(Update m_set 在 for 循环中使用,它通过几个使用不同类型参数的方法。如果我要添加例如 int.class in getMethod
,我会在一次迭代后得到错误,因为下一个方法需要 String .class.是否可以使用反射来解决此类问题?):
Method m_set = product.getClass().getMethod(method_name);
m_set.invoke(product, method_value);
我收到此错误:
Exception in thread "main" java.lang.NoSuchMethodException: test.NormalChair.setHeight()
at java.lang.Class.getMethod(Class.java:1655)
at test.ProductTrader.create(ProductTrader.java:68)
at test.Test.main(Test.java:32)
错误地表明它试图在我使用此方法的类中查找方法。但是该方法在父类中,并且是公共方法。我知道如果我会使用getDeclaredMethod
,它会给出类似的错误,但是为什么它会给出这个错误getMethod
呢?
我的班级有这个方法:
public abstract class AbstractChair {
public String name;
public int height;
public AbstractChair() {
}
public AbstractChair(String name, int height){
this.name = name;
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHeight() {
return height;
}
public void setHeight(int height) {
this.height = height;
}
}
我尝试使用此方法的班级:
public class NormalChair extends AbstractChair {
public NormalChair() {
super();
}
public NormalChair(String name, int height) {
super(name, height);
}
// Copy constructor
public NormalChair(NormalChair chair) {
this(chair.getName(), chair.getHeight());
}
}
更新2
如果我做这样的事情:
if(method_name == "setHeight"){
Method m_set = product.getClass().getMethod(method_name, int.class);
m_set.invoke(product, method_value);
}
else if (method_name == "setName")
{
Method m_set = product.getClass().getMethod(method_name, String.class);
m_set.invoke(product, method_value);
}
然后错误消失。有人可以提出更通用的方法吗?