Heim >Java >javaLernprogramm >Reflexion basierend auf Java
Wie erstelle ich ein Klassenobjekt? Es gibt zwei Möglichkeiten:
class.forName("class name");
Class a = a.class;
Der Unterschied zwischen den beiden ist: forName() hilft Ihnen bei der Initialisierung der statischen Variablen und; Klasse a = a.class muss statische Variablen selbst initialisieren; durch Reflexion kann die Methode des Objekts von Klasse zu geändert werden ein Objekt; nstanceof kann bestimmen, ob eine Klasse zu einer anderen Klasse gehört, um bei der Abwärtstransformation zu beurteilen: Konstruktoren, Mitgliedsvariablen, Mitgliedsmethoden und Zugriffsmitglieder von eine bestimmte Klasse;
Mitgliedsvariablen abrufen:
class.getFields(); Alle öffentlichen Felder abrufen
class.getField(); "name"); Holen Sie sich ein bestimmtes öffentliches Feld (name); Holen Sie sich ein bestimmtes privates Feld phoneNum; .set(obj, „Andy Lau“); darunter ist unser obj ein von unserer Klasse generiertes Objekt:
class.getMethods(); alle öffentlichen Methoden;
class.getDeclaredMethods(); Holen Sie sich alle Methoden; class.getMethod("Methodenname", String.class); Holen Sie sich eine einzelne spezifische Methode; ; gibt ein Methodenobjekt zurück; dann müssen wir wie bei einem Feld zuerst ein Objekt generieren. In diesem Fall verwenden wir die Methodenausführungsfunktion invoke() Objekt, und 20 ist der Parameter;
kann sogar unsere main()-Methode widerspiegeln class.getMethod("main", Stirng[].class); Um Reflektion zu implementieren, neue Klassen zu erstellen und Methoden auszuführen, verwenden Sie Reflektion, um generische Prüfungen zu vermeiden: Wir können sogar die Klassendatei eines bestimmten Containers aufrufen und dann seine Methode aufrufen, um das Problem der generischen Prüfung zu vermeiden Darüber hinaus können wir den dynamischen Proxy-Modus auch durch Reflektion implementieren:
interface Subject{ public void doSomething(); } class RealSubject implements Subject{ public void doSomething(){ System.out.println("call doSomething()"); } } class ProxyHandler implements InvocationHandler{ private Object tar; public Object bind(Object tar){ this.tar = tar; return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method ,Object[] args) throws Throwable{ Object result = null; result = method.invoke(tar,args); return result; } } public class Test { public static void main(String[] args[]){ ProxyHandler proxy = new ProxyHandler(); Subject sub = (Subject) proxy.bind(new RealSubject()); sub.doSomething(); } }
Das obige ist der detaillierte Inhalt vonReflexion basierend auf Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!