私はこのコードを使用しようとします (更新m_set は、異なる型引数を使用するいくつかのメソッドを通過する for ループ内で使用されます。たとえば、 int.class を に追加するとgetMethod
、1 回の反復後にエラーが発生します。次のメソッドには文字列が必要なためです。 .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());
}
}
Update2
私がこのようなことをすると:
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);
}
するとエラーが消えます。誰かがより普遍的なアプローチを提案できますか?