java - 从 JDK 访问非公共(public)(java 原生)类 (7)

标签 java reflection private java-7

我想使用 MethodHandleNatives.getTargetMethod(MethodHandle)AccessibleObject 方法。 MethodHandleNatives 类不是公共(public)的。 那么有人知道我该怎么做吗?

我知道可以通过反射访问私有(private)方法和字段,所以我问这是否也可能。

谢谢。

最佳答案

我找到了解决办法。
这并不简单,但很有效 =)

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();
    }

关于java - 从 JDK 访问非公共(public)(java 原生)类 (7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16040726/

相关文章:

java - Java正则表达式

java - 带有 Tomcat 和 ContextLoaderListener 的 PropertyPlaceholderConfigurer

Java - 具有指向其子类的类名的静态字段的接口(interface)?

java - 使用构造函数参数的值初始化数组 - 无法初始化?

java - 从数组列表和链表的末尾一一删除 100 万个整数

java - 错误 :java: error: invalid source release: 13 using JDK12 with IntelliJ

Ruby 归因方法

go - 什么是 reflect.Value 在 golang 中的零值

methods - 如何使用 PowerMockito 模拟私有(private)方法的任何参数?

java - 使用反射设置私有(private)字段适用于静态或最终,但不适用于静态最终(组合)