使用Java 8,现在可以使用::
语法将方法作为第一类对象引用,如下所示:
Map<Integer, String> strings = new HashMap<>();
...
Function<Integer, String> get = strings::get;
...
如何使用反射实现相同的分配(而不是如图所示编码)?
答案 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.这可以绑定到一个对象,但我不记得确切的语法。