首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java函数接口获取闭包信息

从Java函数接口获取闭包信息
EN

Stack Overflow用户
提问于 2017-07-26 18:12:24
回答 1查看 436关注 0票数 1

我希望能够在运行时从Java功能接口访问闭包环境信息。例如,我将一个lambda (比方说,(input) -> input + knownVariable )传递给一个函数lambdaProcessor

现在,在lambdaProcessor中,我希望能够访问与此lambda相关的环境,并获取存储在此环境中的所有变量的值。

这个是可能的吗?我不介意必须创建自己的功能界面,或者使用反射等等。

我希望最后的输出类似于variable name -> value/address的地图。所以我应该可以这样做:

代码语言:javascript
复制
void lambdaProcessor(FunctionalInterfaceInstance l) {
    System.out.println(l.getEnvironment());
}

它应该打印出来

代码语言:javascript
复制
{"knownVariable": 10, ... }

或者,即使它不存储变量名,只存储某种标记,我仍然希望

代码语言:javascript
复制
{"reference1": 10, ... }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-26 20:51:54

可以使用反射从生成的lambda类检索捕获的变量。请注意,这是非常脆弱的,因为lambda类结构是未指定的,可以随时更改(甚至可能不存在)。示例:

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45334544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档