我希望能够在运行时从Java功能接口访问闭包环境信息。例如,我将一个lambda (比方说,(input) -> input + knownVariable )传递给一个函数lambdaProcessor。
现在,在lambdaProcessor中,我希望能够访问与此lambda相关的环境,并获取存储在此环境中的所有变量的值。
这个是可能的吗?我不介意必须创建自己的功能界面,或者使用反射等等。
我希望最后的输出类似于variable name -> value/address的地图。所以我应该可以这样做:
void lambdaProcessor(FunctionalInterfaceInstance l) {
System.out.println(l.getEnvironment());
}它应该打印出来
{"knownVariable": 10, ... }或者,即使它不存储变量名,只存储某种标记,我仍然希望
{"reference1": 10, ... }发布于 2017-07-26 20:51:54
可以使用反射从生成的lambda类检索捕获的变量。请注意,这是非常脆弱的,因为lambda类结构是未指定的,可以随时更改(甚至可能不存在)。示例:
static void printCaptures(Function<Integer, String> f) throws Exception {
System.out.println(f.getClass());
for (Field field : f.getClass().getDeclaredFields()) {
field.setAccessible(true);
System.out.println(field.getName() + ": " + field.get(f));
}
}Ideone Demo
https://stackoverflow.com/questions/45334544
复制相似问题