问题
I want to use the method MethodHandleNatives.getTargetMethod(MethodHandle)AccessibleObject. The class MethodHandleNatives is not public. So does anybody know how I can do that?
I know that its possible to access private methods and fields via reflections, so I am asking, if this is also possible.
Thanks.
回答1:
I have found a solution.
It is not straight forward but it works =)
MethodHandle mh; // a MethodHandle Object
Class<?> mhn;
try {
mhn = Class.forName("java.lang.invoke.MethodHandleNatives");
Constructor<?> con = mhn.getDeclaredConstructor();
con.setAccessible(true);
Object mhnInstance = con.newInstance();
Method getTargetMethod = mhn.getDeclaredMethod("getTargetMethod", new Class<?>[]{MethodHandle.class});
getTargetMethod.setAccessible(true);
Method inside = (Method) getTargetMethod.invoke(mhnInstance, mh);
System.out.println("INSIDE = " + inside.toGenericString());
} catch (Throwable e) {
e.printStackTrace();
}
来源:https://stackoverflow.com/questions/16040726/access-non-public-java-native-classes-from-jdk-7