Spiegelung
Reflexion: Zeichnen Sie die Eigenschaften und Methoden einer Klasse in entsprechende Klassen ab.
Grundlegende Verwendung der Reflexion
Es gibt drei Möglichkeiten, Klassenklassen zu erhalten:
Schreiben Sie einfach gemäß der API, der allgemeine Prozess ist:
Verwenden Sie den Parametertyp der Methode, um eine Methode basierend auf: Methodenüberladung eindeutig zu identifizieren
Reflexion von Arrays
Das folgende Beispiel zeigt hauptsächlich mehrere Punkte:
public class reflectTest {public static void main (String [] args) {int [] a1 = new int [] {1,2,3}; int [] a2 = new int [5]; int [] [] a3 = new int [2] [3]; System.out.println (a1.getClass () == a2.getClass ()); // True System.out.println (a1.getClass ()); // class [i system.out.out.println (a3.getClass ()); // class [[i system.out.println a3.getClass (). GetuperClass ()); // True System.out.println (a2.getClass (). GetuperClass ()); // Klasse java.lang.object // Der nächste Satz kompiliert nicht: (15, 42) Java: untrennbare Typen: java.lang.lang.lang.lang.ALL.LANG.CLASS#1#1, insgesamt? erweitert int []> und java.lang.class <Capture#2, insgesamt? erweitert int [] []> //system.out.println (a1.getClass () == a3.getClass ()); Object [] B3 = A3; // kompiliert durch // Der nächste Satz übergibt keinen Fehler: (17, 24) Java: Inkompatibler Typ: Int [] kann nicht in Java.lang.Object [] // Objekt [] B1 = A1 konvertiert werden; String S1 = "ABC"; System.out.println (arrays.aslist (a1)); // [i@1540e19d] system.out.println (arrays.aslist (s1)); // [abc]}}}Ausgabe:
Trueclass [iClass [[iTRueClass Java.lang.Object [[I@1540e19d] [ABC]
Eingabe: HashCode und Speicher -Leck -Problem Siehe Java -API:
Wenn sich die Mitgliedsvariable, die an der Hascode -Berechnung beteiligt ist, in der Mitte ändert, schlägt die anschließende Entfernung fehl
Konfigurationsdatei Laden
Der Klasse Loader lädt den Namen der schreibgeschützten Konfigurationsdateiklasse.Class.getClassloader (). GetResourceAsStream (STR);
Der Klassenname.Class.getResourceAsStream (STR) ruft im Wesentlichen den Klassenloader auf. Quellcode Intercept (class.java unter java.langpaket):
public InputStream getResourceAsStream (String -Name) {name = resolvename (name); Classloader cl = getClassloader0 (); if (cl == null) {// eine Systemklasse. return classLader.getSystemResourceAsStream (Name); } return cl.getResourceAsStream (Name);}In Bezug auf den Pfad strs ist die Schreibmethode etwas besonderes.
In der Vergangenheit mussten beim Kompilieren von Java -Code einige Konf/ Ordner zu Abhängigkeiten hinzugefügt oder als Quellordner gekennzeichnet werden. Es waren offensichtlich XML -Dateien, aber es gab keinen Java -Quellcode. Von hier aus weiß ich jetzt, dass es an der Verwendung von Reflexion zum Laden der Konfigurationsdatei liegt
Inspector & JavaBean
Der Prozess der Javabäer liest den Wert von Attribut X: Kapitalisierung, Präfix und Erhalten von Methoden.
"x"-> "x"-> "getX"-> "methodgetX"
Ich habe es im Moment nicht selbst mit Selbstbeobachtung benutzt, damit ich den Code nicht mehr einfüge, nur die Kernklasse ist beigefügt
Einfache Implementierung: Verwenden Sie Java.beans.PropertyDescriptor -Klasse
Probleme implementieren
JavaBean muss einen Konstruktor ohne Parameter haben
Verwenden des Beanutils -Toolkits