2016-05-26 10 views
1

Ich versuche, eine Karte Wert durch seinen Schlüssel Reflexion zu erhalten:Erste Karte Artikel mit Reflexion

HashMap<String, Float> myMap = new HashMap<String, Float>(); 
myMap.put("time", Float.valueOf(-1.7)); 
String param = "time"; 
//... 
float modif = (float)myMap.getClass().getDeclaredMethod("get", String.class).invoke(myMap, param); 

Aber ich bekomme diese Fehlermeldung:

java.lang.NoSuchMethodException: java.util.HashMap.get(java.lang.String) 

Kann jemand bitte vorschlagen Warum?

Antwort

1

Ihre falschen Parametertyp DeclaredMethod während des Gesprächs die Bereitstellung Funktion. Es sollte

getDeclaredMethod("get", Object.class) 

Die komplette Linie in Ihrem Beispiel wäre wie Object.class statt String.class sein -

Float modif = (Float) myMap.getClass().getDeclaredMethod("get", Object.class).invoke(myMap, param); 
2

Ihr Problem hier ist der Typ des Arguments der get Methode ist es nicht String aber Object wie Sie here sehen können, wird diese Arbeit:

float modif = (float)myMap.getClass().getDeclaredMethod("get", Object.class) 
    .invoke(myMap, param); 
+0

Vielen Dank. Dein Vorschlag hat mein Problem gelöst, aber Naveen Ramawat gab seine Antwort etwas früher, also markiere ich seine Eins als akzeptiert. – Vic

+0

Ich wusste das nicht. Abgestimmt. – Vic