Java Reflection Learning <BR>Die sogenannte Reflexion kann als Vorgang des Abrufens von Objekttypinformationen während der Laufzeit verstanden werden. Bei herkömmlichen Programmiermethoden müssen Programmierer in der Kompilierungsphase entscheiden, welche Typen verwendet werden sollen. Mithilfe der Reflexion können Programmierer diese Informationen jedoch dynamisch abrufen und tragbareren Code schreiben. Streng genommen ist Reflexion kein Merkmal einer Programmiersprache, da der Reflexionsmechanismus in jeder Sprache implementiert werden kann. Wenn jedoch die Programmiersprache selbst Reflexion unterstützt, ist die Implementierung von Reflexion viel bequemer.
1. Erhalten Sie die Typklasse <BR>Wir wissen, dass alles in Java ein Objekt ist und die Objekte, die wir im Allgemeinen verwenden, direkt oder indirekt von der Objektklasse erben. Die Object-Klasse enthält eine Methode namens getClass, mit der die Typklasse einer Instanz abgerufen werden kann. Eine Typklasse bezieht sich auf eine Klasse, die einen Typ darstellt, da alles ein Objekt ist und Typen keine Ausnahme bilden. In Java wird eine Typklasse zur Darstellung eines Typs verwendet. Alle Typklassen sind Instanzen der Class-Klasse. Hier ist zum Beispiel der folgende Code:
A a = neues A();
if(a.getClass()==A.class)
System.out.println("equal");
sonst System.out.println("ungleich");
Das Ergebnis wird „gleich“ ausgedruckt.
Es ist ersichtlich, dass Objekt a eine Instanz von A ist, eine bestimmte Klasse von A. Das durch die Verwendung von a.getClass() in der if-Anweisung zurückgegebene Ergebnis ist genau die Typklasse von A. Um einen bestimmten Typ einer Typklasse auszudrücken In Java können Sie die Methode „Type.class“ verwenden, da a.getClass() die Typklasse von A erhält, also A.class. Das Ergebnis der Ausführung des obigen Codes ist also die Ausgabe von „equal“. Ein besonderer Hinweis ist, dass die Typklasse der übergeordneten Klasse und die Typklasse der Unterklasse unterschiedlich sind. Unter der Annahme, dass A eine Unterklasse von B ist, erhält der folgende Code die Ausgabe "ungleich":
A a = neues A();
if(a.getClass()==B.class)
System.out.println("equal");
sonst System.out.println("unequal");
Wenn Sie also eine Instanz kennen, können Sie die Typklasse dieses Objekts mit der Methode „getClass()“ der Instanz abrufen, und wenn Sie einen Typ kennen, können Sie die Typklasse dieses Typs mit der Methode „.class“ abrufen .
2. Typinformationen abrufen <BR>Nachdem Sie die Typklasse erhalten haben, können Sie einige der Methoden aufrufen, um Typinformationen abzurufen. Die wichtigsten Methoden sind:
getName():String: Den vollständigen Namen des Typs abrufen.
getSuperClass():Class: Ruft die direkte übergeordnete Klasse dieses Typs ab. Wenn der Typ keine direkte übergeordnete Klasse hat, wird null zurückgegeben.
getInterfaces():Class[]: Alle von diesem Typ implementierten Schnittstellen abrufen.
isArray():boolean: Bestimmen Sie, ob der Typ ein Array ist.
isEnum():boolean: Bestimmen Sie, ob der Typ ein Aufzählungstyp ist.
isInterface():boolean: Bestimmen Sie, ob der Typ eine Schnittstelle ist.
isPrimitive():boolean: Bestimmen Sie, ob der Typ ein Basistyp ist, dh ob er int, boolean, double usw. ist.
isAssignableFrom(Class cls):boolean: Bestimmen Sie, ob dieser Typ die übergeordnete (Vorfahren-)Klasse oder die übergeordnete (Vorfahren-)Schnittstelle vom Typ cls ist.
getComponentType():Class: Wenn der Typ ein Array ist, wird der Komponententyp des Arrays zurückgegeben.
Darüber hinaus können auch Vorgänge wie die Typkonvertierung durchgeführt werden. Die wichtigsten Methoden sind:
asSubclass(Class clazz):Class: Ändern Sie diesen Typ