使用Reflection分配对“Function”的引用

时间:2014-05-21 19:46:45

标签: java

使用Java 8,现在可以使用::语法将方法作为第一类对象引用,如下所示:

Map<Integer, String> strings = new HashMap<>();
...

Function<Integer, String> get = strings::get;
...

如何使用反射实现相同的分配(而不是如图所示编码)?

2 个答案:

答案 0 :(得分:3)

您可以使用(原始代码警告)执行此操作:

Map<Integer, String> strings = new HashMap<>();
...

Method getMethod = strings.getClass().getMethod("get", Object.class);
Function<Integer, String> function = i -> getMethod.invoke(strings, i);

您现在的工作是确保get的参数是一个整数,并返回特定类型并处理异常等。

答案 1 :(得分:1)

使用反射将为您提供诸如

之类的方法
Method get = Map.class.getMethod("get", Object.class);

然而,这并不像您在示例中那样绑定到对象。您可以做的是使用MethodHandles.这可以绑定到一个对象,但我不记得确切的语法。