2016-10-01 3 views
0

Ich möchte eine Methode in einem Enum speichern, aber Class.getDeclaredMethod wirft NoSuchMethodException, also wie kann ich damit umgehen? Mein Code:Try - Catch around Enum

public enum Card { 

OPENPRISON(false, Cards.class.getDeclaredMethod("", Player.class)); 

private boolean isInstant; 
private Method method; 

private Card(boolean isInstant, Method method){ 
    this.method = method; 
    this.isInstant = isInstant; 
} 

public boolean isInstant() { 
    return isInstant; 
} 

public void run(Player p){ 

} 

}

und OPENPRISON ist das Problem

+0

Was ist "Cards" -Klasse. Ist es eine andere Klasse als die Card enum? –

Antwort

1

Ein sofortiges technisches Problem ist, dass Sie nicht einen Methodennamen in Ihrem Anruf getDeclaredMethod() Bereitstellung:

OPENPRISON(false, Cards.class.getDeclaredMethod("", Player.class)); 

Ein größeres Problem ist, warum Sie überhaupt Reflexion verwenden müssen.

Ein Enum-Wert ist eine Konstante. Was können Sie mit Reflexion tun, die Sie mit einer statischen Methode nicht so leicht machen könnten? Oder mit einer Methode außerhalb der Enum?

0

Nun wirft der Code eine geprüfte Ausnahme, so dass Sie eine Methode verwenden:

OPENPRISON(false, foo()); 

private static Method foo() { 
    try { 
     return Cards.class.getDeclaredMethod("", Player.class); 
    } catch (NoSuchMethodException e) { 
     return null; 
    } 
} 

Natürlich bleibt die Frage, ob Sie das Problem nicht ohne Reflexion lösen kann - am ehesten möglich ist.