当前位置: 首页 > 知识库问答 >
问题:

MethodHandle查找工具

柯书
2023-03-14
public class MethodHandlerAccessTest  {

        private static class NestedClass {
            private static void foo(){}
        }

        @Test
        public void testPrivateAccess() throws Throwable {
            NestedClass.foo();  //compiles and executes perfectly
            MethodType type = MethodType.methodType(void.class);
            MethodHandles.Lookup lookup = MethodHandles.lookup();
            MethodHandle mh = lookup.findStatic(NestedClass.class, "foo", type);
        }

 }

编辑:

这就是我得到的:

共有1个答案

雷锋
2023-03-14

问题是您的测试方法并没有真正调用nestedclass.foo()。这一行:

NestedClass.foo();

...实际上转换为对在foo中生成的合成方法的调用,如下所示:

NestedClass.access$000();

其中access$000如下所示:

// Note package access
static void access$000() {
    foo();
}
 类似资料:
  • 我编写了一个测试、和方法直接调用的性能的小基准测试。 我读到的性能几乎与直接调用相同。但我的测试结果显示了另一种情况:调用比反射慢三倍。我的问题是什么?这可能是一些JIT优化的结果吗? 环境:java版本“1.7.0_11”java(TM)SE Runtime Environment(build 1.7.0_11-B21)java HotSpot(TM)64位服务器VM(build 23.6-B0

  • 我有一个项目在Android Studio或Gradle中构建时已经开始抛出这个错误: 现在我假设它与Java 8特性的使用有关,可能是lambda,但是错误消息没有给出问题所在的线索——可能是我的代码,也可能是库。 找出违规代码在哪里的最佳方法是什么?这是一个相当大的应用程序,有几个模块和相当多的库。

  • Sql查询来查找活动员工。根据employee id列降序对输出进行排序,只获取前15条记录。显示员工id、员工姓名、城市、州、国家、薪资、在职日期、状态、部门名称、经理姓名。雇员姓名:用空格字符连接firstname和lastname并只从雇员姓名中提取前10个字母经理姓名:显示firstname和lastname(用空格分隔) null

  • 嗨,这里有一个概要用例。我有一个在JavaFX Scene Builder中开发的看似有效的FXML文件。到目前为止,它是一个非常重要的XML块,并且在FXML文件的某个地方存在运行时加载错误。场景构建器与预览选项工作良好。我有一个'simple.FXML'文件,用来验证控制器是否按照预期工作,即相同的控件和事件,但没有额外的FXML布局。我已经并且我正在执行cut-out-code And te

  • 我对Android/Kotlin非常陌生。我已经创建了一些程序,正在取得良好的进展。但是从今天开始,我遇到了一个问题,即使在标准的“Hello World”程序中也无法运行“find viewbyid”(空活动)。 我只在XML中添加了android:id=“@+id/mytext”一行。

  • 所以我试图解析一些opendata来构建一个数据库。以下是我所做的: 它返回: 我尝试解析其他一些xml数据(更改url),结果很好 我正在处理的xml数据大致如下: 抱歉,我是python和ElementTree新手,希望能得到一些好的建议,谢谢