[JAVA] Ich wusste, was Reflexion war

Es ist seltsam und interessant.

Reflection.java


package reflection;

import java.lang.reflect.Method;

public class Reflection {
	
	private static <T> void test(Class<T> t) {
		
		try {
			//Holen Sie sich eine Instanz
			Object instance = t.newInstance();
			
			//Methode abrufen
			Method method = t.getMethod("test", String.class);
			
			//Methodenausführung
			method.invoke(instance, "Beeindruckend");
			
		} catch (ReflectiveOperationException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		test(ReflectionTest.class);
	}
}

class ReflectionTest {
	
	public void test(String str) {
		System.out.println(str);
	}
}

Ergebnis

Beeindruckend

Na, was ist es? Wie der Fernzugriff auf einen PC

Wie der Zugriff auf eine Klasse und der Zugriff auf eine Methode

Es scheint, dass Sie auch private Methoden ausführen können, wenn Sie diese verwenden

Lass es uns versuchen

Ich habe versucht, es privat zu machen.java


class ReflectionTest {
	
	private void test(String str) {
		System.out.println(str);
	}
}

Ergebnis

java.lang.NoSuchMethodException: reflection.ReflectionTest.test(java.lang.String)
	at java.lang.Class.getMethod(Unknown Source)
	at reflection.Reflection.test(Reflection.java:14)
	at reflection.Reflection.main(Reflection.java:25)

Nein! !! !! Lügner! !! !!

Dies scheint notwendig zu sein.java


package reflection;

import java.lang.reflect.Method;

public class Reflection {
	
	private static <T> void test(Class<T> t) {
		
		try {
			//Holen Sie sich eine Instanz
			Object instance = t.newInstance();
			
			//Methode abrufen
			Method method = t.getDeclaredMethod("test", String.class);
			
			//Für Privatpersonen,Ich werde darauf zugreifen, ich brauche eine Erklärung
			method.setAccessible(true);
			
			//Methodenausführung
			method.invoke(instance, "Beeindruckend");
			
		} catch (ReflectiveOperationException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		test(ReflectionTest.class);
	}
}

class ReflectionTest {
	
	@SuppressWarnings("unused")
	private void test(String str) {
		System.out.println(str);
	}
}

Es scheint, dass Sie "true" in der "setAccessible" -Methode der "Method" -Klasse setzen müssen.

Nun, dieser Typ hat Zugang zur Testklasse und ist privat

Es scheint, dass Sie alles gewaltsam tun können

Ich verstehe nur nicht Es gibt Ausnahmen wie "ReflectiveOperationException"

Sobald Sie einen kleinen Fehler machen, erhalten Sie verschiedene Ausnahmen.

Nun, es ist wirklich ein Stromgeschäft

Recommended Posts

Ich wusste, was Reflexion war
Was ich gelernt habe
Was ich gelernt habe ② ~ Mock ~
Was ich gelernt habe ~ ~ DJUnit ~
Was ich über Java 8 recherchiert habe
Wovon ich bei der Einführung der JNI-Bibliothek süchtig war
Was ich über Java 6 recherchiert habe
Was ich beim Update auf Spring Boot 1.5.12 behoben habe ・ Wovon ich süchtig war
Wovon ich süchtig war, als ich rspec auf Schienen benutzte
Ich bin von Rails gekommen und wusste nicht, was [attr_accessor] ist
Was ich über Java 9 recherchiert habe
Was ich mit der Redmine REST API süchtig gemacht habe
Was ich über Java 7 recherchiert habe
Was ich über Kotlin gelernt habe
Was ich über Java 5 recherchiert habe
Ich habe versucht zusammenzufassen, was bei der Site-Java-Ausgabe gefragt wurde.
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
[Rails] Was war die Fehlermeldung?
Was ich aus dem Studium von Rails gelernt habe
Was ich mit Java Gold gelernt habe
Was ich mit Java Silver gelernt habe
Was ich über Java-Lernen recherchiert habe
Memorandum: Wovon ich süchtig war, als ich auf die Accounting Freee API traf