2
MethodHandle的Java文档说私有方法应该通过findSpecial.But调用,在以下示例中我可以通过findVirtual调用它。使用findVirtual调用的方法处理私有方法
有人请解释我在这里想念什么?
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");}
}
有没有一种方法可以从PrivateClassMethodLookupTest调用Inner.m? MethodHandles.lookup() .findSpecial(....)不起作用 – nantitv
它是可行的使用反射API 方法declaredMethod = PrivateClassMethodLookupTest.Inner.class.getDeclaredMethod(“m”); declaredMethod.setAccessible(true); MethodHandle mh = MethodHandles.lookup()。unreflect(declaredMethod); mh.invoke(new PrivateClassMethodLookupTest.Inner()); – D0dger
你知道为什么findSpecial不可能吗? – nantitv