Java - java.lang.NoSuchMethodException

Ich versuche es mal mit diesem code (Update m_set verwendet wird, im inneren for-Schleife, die durchläuft verschiedene Methoden mit unterschiedlichen Argumenttypen. Wenn ich hinzufügen würde, zum Beispiel int.class in getMethod würde ich bekomme Fehler nach einer iteration, da die next-Methode erfordern würde String.class. Ist es möglich, solche problem zu lösen mit der spiegelung?):

Method m_set = product.getClass().getMethod(method_name);
m_set.invoke(product, method_value);

Bekomme ich diesen Fehler:

 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)

Fehler zeigt es, dass es versucht zu finden, die Methode in der Klasse, dass ich diese Methode verwenden. Aber die Methode in der parent-Klasse, und es ist eine öffentliche Methode. Ich weiß, wenn ich verwenden würde getDeclaredMethod, es würde einen ähnlichen Fehler, aber warum gibt es diesen Fehler mit getMethod?

Meiner Klasse jener hat diese Methode:

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;
    }   
}

Meiner Klasse, dass ich versuche, diese Methode auf:

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

Wenn ich etwas wie das hier tun:

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);
}

Dann der Fehler verschwindet. Kann jemand empfehlen universeller Ansatz?

Ihre Methode Signatur scheint nicht in übereinstimmung mit der deklarierten Methode.
Nicht vergleichen Sie Strings mit ==. Stattdessen equals wie stringOne.equals(stringTwo). Mehr info hier

InformationsquelleAutor Andrius | 2013-11-11

Schreibe einen Kommentar