Zunächst müssen Sie verstehen, was die Aufrufmethode tut und welche spezifische Verwendung sie hat. Tatsächlich müssen Sie herausfinden, um welche Klassendatei es sich im Quellcode handelt und in welchem Paket sie sich befindet, und die Quelle verfolgen.
Die Aufrufmethode stammt aus der Method-Klasse und wird möglicherweise nicht so häufig verwendet wie die häufig verwendeten grundlegenden Typ-Wrapper-Klassen sowie Sammlungsklassen und deren Erweiterungen und Dienstprogrammklassen.
Aber das Paket, in dem sich die Method-Klasse befindet, ist die berühmte Reflektion Reflact. Wenn es kein Sprichwort gibt, dass Java keine Reflektion hat, dann werden viele Frameworks nicht existieren.
Wir erstellen oft neue Objekte, aber die Voraussetzung für neue Objekte ist, dass Sie wissen, welches Objekt Sie benötigen, bevor Sie neue Objekte erstellen können. Allerdings gibt es sowohl im Code als auch im wirklichen Leben Unbekannte, das heißt, Sie wissen nicht, welche Klasse es hat ist, bis es durch Bedingungen eingeschränkt wird, wann das Programm ausgeführt wird.
Reflection löst dieses Problem, indem es die Objektstruktur abruft und Methoden zur Laufzeit aufruft.
In der Methodenklasse geht es um reflektierende Aufrufmethoden.
Das Bild unten ist die offizielle Anmerkung der Methodenklasse.
Dies bedeutet wahrscheinlich, dass Sie durch Bereitstellung der Methodeninformationen der Klasse oder Schnittstelle auf die entsprechende Methode zugreifen und diese aufrufen können.
Invoke bedeutet Aufrufen, was bedeutet, dass wir die Aufrufmethode über die Methodenklasse unter dem Reflexionspaket aufrufen, die von uns bereitgestellte Methode und die Parameter der aufrufenden Methode aufrufen können, um den dynamischen Aufruf abzuschließen.
Das heißt, der Aufruf basiert auf dem Objekt/der Instanz, dem Methodennamen und den von Ihnen angegebenen Parametern. Suchen Sie einen „Ersatz“, der Ihnen beim Aufrufen der Methode hilft.
2 Die Verwendung der Aufrufmethode
Tatsächlich unterscheidet sich die Verwendung der Aufrufmethode von dem, was wir üblicherweise sehen.
Wir erstellen oft ein Objekt A, die Methode getA() im A-Objekt und dann A.getA()
Wir verwenden eine neue Methode zum Aufrufen von
(1) Erstellen Sie einen „Ersatz“ für die Methode (eigentlich Erstellen Sie ein Methodenobjekt, lassen Sie dieses Methodenobjekt die Methode ersetzen, die Sie jetzt verwenden möchten)
(2) Geben Sie dann dem Avatar die Objekte und Parameter, die er benötigt, und lassen Sie den Avatar es für Sie aufrufen (wie JOJOs Avatar für Sie kämpft)
Die spezifische Codedemonstration lautet wie folgt:
public class InvokeTest { public void test(String[] arg){ for (String string : arg) { System.out.println("zp is " + string); } } @Test public void invokeDemo() throws Exception { //获取字节码对象,这里要填好你对应对象的包的路径 Class<InvokeTest> clazz = (Class<InvokeTest>) Class.forName("com.example.zp.demo.testDemo.InvokeTest"); //形式一:获取一个对象 // Constructor con = clazz.getConstructor(); // InvokeTest m = (InvokeTest) con.newInstance(); //形式二:直接new对象,实际上不是框架的话,自己写代码直接指定某个对象创建并调用也可以 InvokeTest m = new InvokeTest(); String[] s = new String[]{"handsome","smart"}; //获取Method对象 Method method = clazz.getMethod("test", String[].class); //调用invoke方法来调用 method.invoke(m, (Object) s); }
Die Verwendung der Aufrufmethode erfordert also einen Schritt mehr als andere Methoden, nämlich die Erstellung eines Methodenobjekts. Dieses Objekt ersetzt die Methode, die das Programm derzeit aufruft.
Und zusätzlich zu den Parametern erfordert invoke auch ein weiteres Objekt, da Methodenaufrufe Objekte erfordern. Wenn also die aufrufende Zielmethode aufrufen möchte, benötigt sie die erforderlichen Objekte der Zielmethode.
Es scheint, dass die Aufrufmethode nicht nur problematischer ist als das direkte Aufrufen der normalen Methode, sondern Sie müssen auch nur Parameter eingeben, ich kann verschiedene alternative Methoden aufrufen und in unbekannten Situationen entscheiden, welches Objekt verwendet wird Auf der Grundlage von Bedingungen aufrufen: Welche Methode kann den Code auf einmal flexibel machen?
Das obige ist der detaillierte Inhalt vonWie verwende ich die Aufrufmethode in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!