Es gibt einen Weg mit Reflexion:
try{
Method m= object.getClass().getMethod("getField"+String.valueOf(i), new Class[]{});
fields+=(String)m.invoke(object);
}catch(...){...}
jedoch: Dieses Geschäft alle Gerüche von schlechter Codierung der Praxis! Kannst du nicht alle getFieldN()
Methoden so umschreiben?
String getField(int fieldNum)
Sie bitten um Probleme, indem Sie nummerierte Methoden erstellen. Denken Sie daran, dass die Reflektion langsam ist und nur verwendet werden sollte, wenn String-basierte Methodenaufrufe für den Ablauf Ihres Programms unbedingt erforderlich sind. Ich benutze diese Technik manchmal für benutzerdefinierte Skriptsprachen, wo Sie eine Methode von Name erhalten müssen. Das ist hier überhaupt nicht der Fall, Ihre Anrufe sind integer-indexed. Sie sollten daher die ganze Zahl als Parameter beibehalten.
Wenn dieser Legacy-Code ist, und Sie sind absolut nicht in der Lage, diese schlechte Codierung zu ändern, dann könnten Sie eine neue Methode zu schaffen getMethod(int)
wie oben besser dran, die bestehenden Methoden zu wickeln, dass nur die Delegierten auf die nummerierten getMethodN()
Methoden.
Ich denke, ich habe vergessen zu erwähnen, dass meine Klasse auch andere Methoden hat, die ich nicht aufrufen möchte. Würde Ihr Code dann immer noch funktionieren? –
Wenn Sie ihre Signaturen kennen, können Sie sie nur auf Basis von 'method.getName()' und 'method.getParameterTypes()' aufrufen –