58得票4回答
方法句柄 - 它到底是什么?

我正在学习JDK 1.7的新特性,但是我不明白MethodHandle的设计目的是什么?我理解(直接)调用静态方法(并使用Core Reflection API,在这种情况下很简单)。我也理解(直接)调用虚拟方法(非静态、非final)(并使用Core Reflection API,需要通过类...

45得票4回答
如何通过使用MethodHandles来提高Field.set的性能?

我正在编写一些调用 Field.set 和 Field.get 数千次的代码。显然,由于反射,这非常慢。 我想看看能否使用Java 7中的MethodHandle来提高性能。到目前为止,我的做法如下: 与其使用field.set(pojo, value),我现在使用的是:private s...

34得票2回答
为什么使用反射来访问类成员,而MethodHandle更快?

随着Java 7的发布,MethodHandle也随之问世。它允许用户像使用其底层字节码一样调用方法。特别地,MethodHandles.Lookup类提供了工厂方法来创建方法句柄以访问类成员: Lookup对象上的工厂方法对应于所有主要的方法、构造函数和字段用例。由工厂方法创建的每个...

25得票5回答
使用MethodHandle查找最具体的重载方法

假设我有一个给定类型(类/接口)中的三个方法:public void foo(Integer integer); public void foo(Number number); public void foo(Object object); 我希望使用 MethodHandle 或反射,在运行...

25得票3回答
MethodHandle性能

我写了一个小基准测试,测试了java.lang.invoke.MethodHandle、java.lang.reflect.Method和直接调用方法的性能。 我看到MethodHandle.invoke()的性能几乎与直接调用相同。但是我的测试结果显示另一种情况:使用MethodHandl...

16得票2回答
为什么我无法在这里使用.invokeExact(),即使MethodType是正确的?

我需要为我的一个项目实现动态构造函数调用。但由于使用的是Java 7,所以我使用java.lang.invoke而不是“传统”的反射API。 代码: @ParametersAreNonnullByDefault public class PathMatcherProvider { ...

14得票3回答
使用java.lang.invoke.MethodHandle调用私有方法

我该如何使用方法句柄调用私有方法呢? 据我所知,只有两种公共可访问的Lookup实例: MethodHandles.lookup() MethodHandles.publicLookup() 但是它们都不允许无限制的私有访问。 有一个非公共的Lookup.IMPL_LOOKUP可以...

13得票2回答
Java-7中的签名多态方法

据我所知,随着Java 7中MethodHandle的引入,编译器生成的方法重载也随之引入。 MethodHandle的javadoc(我已经删减了示例)说明如下: Here are some examples of usage: Object x, y; String s; int i...

12得票1回答
将方法引用转换为MethodHandle是否可行?

是否可以将方法引用(例如SomeClass::someMethod)转换为MethodHandle实例?我想要编译时检查的好处(确保类和方法存在),以及使用MethodHandle API内省方法的能力。 使用情况:如果请求没有被特定方法触发(避免无限递归),则需要执行代码。我希望在编译时检...

11得票2回答
如何移除用作监听器的Lambda表达式/方法句柄?

Java 8 引入了Lambda表达式,这是一个很好的功能。但现在考虑重写以下代码:class B implements PropertyChangeListener { void listenToA(A a) { a.addPropertyChangeListener...