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