我不知道,这是否是你真正想要的。也许你可以提供更多关于你想要用它实现的目标的信息。但是,如果要访问 ,则可以像以下代码示例中那样执行此操作:Lookup.IMPL_LOOKUP
public class Main {
public static void main(String[] args) {
Lookup myLookup = MethodHandles.lookup(); // the Lookup which should be trusted
NestedTestClass ntc = new Main().new NestedTestClass(); // test class instance
try {
Field impl_lookup = Lookup.class.getDeclaredField("IMPL_LOOKUP"); // get the required field via reflections
impl_lookup.setAccessible(true); // set it accessible
Lookup lutrusted = (Lookup) impl_lookup.get(myLookup); // get the value of IMPL_LOOKUP from the Lookup instance and save it in a new Lookup object
// test the trusted Lookup
MethodHandle pmh = lutrusted.findVirtual(NestedTestClass.class, "gimmeTheAnswer", MethodType.methodType(int.class));
System.out.println(pmh.invoke(ntc));
} catch (Throwable e) {
e.printStackTrace();
}
}
// nested class with private method for testing
class NestedTestClass{
@SuppressWarnings("unused")
private int gimmeTheAnswer(){
return 42;
}
}
}
它适用于JDK 7,但可能会在JDK 8中中断。并要小心!我的防病毒软件在执行时发出了警报。我认为没有一个公开或干净的方式来做到这一点。
我遇到了类似的问题,最终找到了一个解决方案:从JDK(7)访问非公共(java-native)类。