2016-07-15 33 views
-1

Ich versuche, ein Methodenobjekt aufzurufen, für eine unbekannte Klasse sind die Parameter in einem String-Array, wie kann ich dies als Argumente übergeben, wenn ein Methodenobjekt aufgerufen wird?Methode Argumente im Array aufrufen

Zum Beispiel

method.invoke(obj, arg1, arg2,...); 

Ich habe

String[] args = {"arg1", "arg2"...} 

Das String-Array wird jedes Mal in Abhängigkeit von Benutzereingaben unterschiedlich sein, so dass in verschiedenen Argumenten ergeben.

+1

Was die Definition des Verfahrens ist? –

+0

Sind die Inhalte des String-Arrays Namen von Variablen im realen Programm? Das kannst du nicht tun. –

+0

Es ist eine andere Methode, die von der Benutzereingabe abhängt, ich habe 5 Klassen, die mit einer 'execute' Methode eingerichtet sind, und je nach Benutzereingabe wird die entsprechende Klasse erstellt. Diese Methoden haben alle unterschiedliche Parametertypen, die ich in einem String-Array habe, daher die Frage. @LouisWasserman Nein .... es ist die Argumente, die ich versuche, zu übergeben. – gptt916

Antwort

1

Wenn die Methode dieses Objekts nur Argumente von String oder einen beliebigen kompatiblen Typ für String hat, können Sie Argumente als Ganzes übergeben. Änderung String [] args = {"arg1", "arg2" ...}; bis Objekt [] args = {"arg1", "arg2" ...}; wie folgt: method.invoke (obj, args);

stellen Sie sicher, dass, wenn Sie das Methodenobjekt erhalten: class.getMethod ("Methode", Typen); Die Typen arg müssen mit der Anzahl und den Argumenten übereinstimmen, die übergeben werden. zum Beispiel: Klasse [] types = {String.class, String.class, String.class}; passt zu Objekt [] args = {"arg1", "arg2", "arg3"}; aber nicht mit Object [] args = { "arg1", „arg2};

dynamische

unter der Annahme, dass die Methoden aufrufen nur Strings akzeptieren psedo (sonst Sie komplexere Mapping benötigen) Code:

Methode:.

otbtain den Namen der Methode

ex reichlich: print // auf variable Methoden gespeichert

Args:

get-Liste oder ein Array von den Benutzereingaben

Beispiel: args = { "bla", "bla" ...}

Typen:

mit Typen arraylist.

für jeden arg, Sie arraylist.add (String.class) // oder jede andere Klasse, wenn kein String

Klasse [] types = {};

Typen = arraylist.toArray (Typen);

Jetzt haben Sie alles, was Sie rufen müssen:

someClass.getMethod (methoden, Typen).aufrufen (instanceofSomeClass, args); // dies

arbeitet, was immer Argumente gibt der Benutzer

+0

Ich denke, Sie versuchen, Laufzeit-Interpreter zu implementieren, wenn ja, warum nicht Nashorn, Groovy oder Jython verwenden? Dadurch können Sie Code im laufenden Betrieb ausführen. Wie auch immer, nachdem ich deine Antwort auf Louis überprüft habe, habe ich einen Hinweis bekommen, was du erreichen willst –