Reflection.java
package reflection;
import java.lang.reflect.Method;
public class Reflection {
private static <T> void test(Class<T> t) {
try {
//Obtenez une instance
Object instance = t.newInstance();
//Get méthode
Method method = t.getMethod("test", String.class);
//Exécution de la méthode
method.invoke(instance, "sensationnel");
} 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);
}
}
résultat
sensationnel
Bien qu'est-ce que c'est? Comme accéder à un PC à distance
Comme accéder à une classe et accéder à une méthode
Il semble que vous puissiez également exécuter des méthodes privées si vous utilisez ceci
essayons
J'ai essayé de le rendre privé.java
class ReflectionTest {
private void test(String str) {
System.out.println(str);
}
}
résultat
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)
Non! !! !! menteur! !! !!
Cela semble nécessaire.java
package reflection;
import java.lang.reflect.Method;
public class Reflection {
private static <T> void test(Class<T> t) {
try {
//Obtenez une instance
Object instance = t.newInstance();
//Get méthode
Method method = t.getDeclaredMethod("test", String.class);
//Pour privé,J'y accéderai, j'ai besoin d'une déclaration
method.setAccessible(true);
//Exécution de la méthode
method.invoke(instance, "sensationnel");
} 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);
}
}
Il semble que vous deviez définir true
dans la méthode setAccessible
de la classe Method
.
Eh bien, ce gars a accès à la classe de test et privé
Il semble que vous puissiez tout faire de force
Je ne comprends tout simplement pas Il y a des exceptions comme ReflectiveOperationException
Dès que vous faites une légère erreur, vous obtiendrez diverses exceptions.
Eh bien, c'est vraiment une affaire d'énergie
Recommended Posts