Java- durch Reflexion über die allgemeine Inspektion

Zunächst wird die Anforderungsbeschreibung

Existierende eine Arraylist Array = new Arraylist (); Wie die Art der Daten in dem Array von String hinzufügen? ? ?

Zweitens denken

Wir wissen, dass einmal in den Sammelklassen generischen Typen angegeben, nur die Art in der Sammlung verwendet. Aber wir können Reflektion verwenden, um die generischen gekreuzt zu inspizieren. Um zum Beispiel der Reflexion in der Erwerb Add Arraylist () Methode verwendet wird, dann rufen, wenn die Add-Methode, es die allgemeine Inspektion kreuzen. Decompile können wir dieses Phänomen sehen.

Im Anschluss an bestehenden Code, der die generischen verwendet, wenn Arraylist zu erstellen.

public class Test {
	public static void main(String[] args) throws Exception {
		ArrayList<Integer> array = new ArrayList<Integer>();
	}
}

Decompile sieht die Datei mit der Klasse, werden Sie keine Zunahme der Generika in dieser Zeit schafft Arraylist finden.

Dies liegt daran, generische Kontrollen bei der Kompilierung durchgeführt, was bedeutet, dass die kompilierte Methode add (), und in der Tat nicht generisch Add angegeben hat () Methode ist die gleiche, sind keine generische Prüfung.

Daher wird durch die erworbene Arraylist Klasse Objektdatei Add reflektiert () -Methode, wenn die Aufruf Methode add () keine allgemeine Inspektion ist.

Drittens zu erreichen Nachfrage

Jetzt verwenden wir Reflexion diese Anforderung umzusetzen.

Code ist wie folgt:

public class Test {
	public static void main(String[] args) throws Exception {
		ArrayList<Integer> array = new ArrayList<Integer>();
		array.add(18);

		Class c = array.getClass();
		Method m = c.getDeclaredMethod("add", Object.class);
		m.invoke(array, "Hello");
		System.out.println(array);
	}
}

Die Testergebnisse sind wie folgt:

Ich denke du magst

Origin www.cnblogs.com/Java-biao/p/12590897.html
Empfohlen
Rangfolge