Java doc de MethodHandle dit que la méthode privée devrait invoquer via findSpecial.But dans l'exemple suivant je suis capable de l'invoquer via findVirtual.Methodhandle méthode privée appelée using findVirtual
Quelqu'un pourrait-il expliquer ce qui me manque ici?
import java.lang.invoke.MethodHandles;
import java.lang.invoke.*;
import java.lang.invoke.MethodType;
public class PrivateClassMethodLookupTest{
public static void main(String[] args) throws Throwable{
new PrivateClassMethodLookupTest().m();
MethodHandle mh = MethodHandles.lookup()
.findVirtual(PrivateClassMethodLookupTest.class, "m", MethodType.methodType(void.class));
mh.invoke(new PrivateClassMethodLookupTest());
}
private void m() { System.out.println("in m");}
}
Existe-t-il un moyen d'appeler Inner.m à partir de PrivateClassMethodLookupTest? MethodHandles.lookup() .findSpecial (....) ne fonctionne pas – nantitv
Il est possible d'utiliser la réflexion API Méthode déclaréeMethod = PrivateClassMethodLookupTest.Inner.class.getDeclaredMethod ("m"); declareMethod.setAccessible (true); MethodHandle mh = MethodHandles.lookup(). Unreflect (méthode déclarée); mh.invoke (new PrivateClassMethodLookupTest.Inner()); – D0dger
Savez-vous pourquoi ce n'est pas possible avec findSpecial? – nantitv