halte ich NoSuchMethodException
in dieser Linie bekommen:Warum bekomme ich NoSuchMethodException?
float modif = (float)sc.affectingObject.getClass().getMethod(sc.affectingMethodName, (Class<?>[])null).invoke(sc.affectingObject, (Object[])null);
wo sc
eine Instanz der Klasse ist SubChange
:
class SubChange implements Serializable {
String changeType;
Serializable affectingObject;
String affectingFieldName;
String affectingMethodName;
public SubChange(String chanType, Serializable affingObj, String affingFM) {
try{
changeType = chanType;
affectingObject = affingObj;
//deciding whether affingFM provides a field name or a method name
for (Field f : affingObj.getClass().getDeclaredFields()) {
if (f.getName().equals(affingFM) == true) {
affectingFieldName = affingFM;
break;
}
}
if (affectingFieldName == null) {
affectingMethodName = affingFM;
}
} catch(Exception e) {
e.printStackTrace();
}
}
//other class methods
}
deren Instanz wie folgt initialisiert wurde:
new SubChange("first", physio, "calcTotalFatigue")
wo physio
ist eine Instanz der inneren Klasse Physiology
gehört zu Klasse Hm
, während der SubChange
Konstruktor von einer anderen inneren Klasse derselben Hm
Klasse aufgerufen wird.
Es ist unnötig zu sagen, dass die Methode calcTotalFatigue()
von physio
existiert.
Kann mir bitte jemand vorschlagen, was ich falsch mache?
ANSWER
der Fehler durch die falschen Zugriffsmodifikator des Verfahrens verursacht wurde, die I calcTotalFatigue()
naiver in der Beschreibung des Problems verzichtet. Durch die Veröffentlichung der Methode wurde das Problem gelöst.
Vielen Dank für Ihre Eingabe. Ich habe getan, was Sie sagten, aber das hat nicht geholfen: 'sc.affectingObject.getClass(). GetName()' zurückgegeben 'Hm $ Physiologie' ' sc.affectingMethodName.toString' zurückgegeben 'calcTotalFatigue' Und innere Klasse' Physiologie '(dessen Objekt' physio' ist) definiert die Methode 'calcTotalFatigue'. Mit "existiert" meinte ich "definiert und richtig geschrieben". Kann es etwas mit Access-Level-Modifikatoren sein? – Vic
@Vic verwenden keine Kommentare für wichtige Ergänzungen. Bearbeite stattdessen deine Frage. – Robert
@Robert Sorry aber das Problem ist jetzt gelöst. – Vic