首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数接口的回调接口

问函数接口的回调接口
EN

Stack Overflow用户
提问于 2018-03-27 18:33:35
回答 1查看 462关注 0票数 0

出于明显的原因,我试图熟悉Java 8的功能接口。我慢慢地理解了这个概念,并一直试图重构一些现有的代码来使用它。我相信有几种不同的方法来实现这个..。然而,无论出于什么原因,我都在挣扎--这真的很令人沮丧。也许在这里用它是没有意义的,但我会让你当法官.

我当前的回调实现使用了一个匿名的内部类,我(希望)用lambda表达式替换它。下面是一个示例:

MessageReceived.java

代码语言:javascript
复制
public class MessageReceived {
    private final Map<String, Researcher> researchers = new HashMap<>();

    public void receive(String researcherName, ResearchData researchData) {
        if (!researchers.containsKey(researcherName)) {

            researchers.put(researcherName, new Researcher(new ResearchCallback() {
                @Override
                public void discoveredResearch(ResearchData researchData, Map<Object, String> discovered) {

                    // iterate discovered
                    discovered.forEach((object, stringData) -> {
                        // do something
                    });
                }
            }));
        }

        researchers.get(researcherName).research(researchData);
    }
}

ResearcherCallback.java

代码语言:javascript
复制
public interface ResearcherCallback {

    void discoveredResearch(ResearchData data, Map<Object, String> discovered);
}

Researcher.java

代码语言:javascript
复制
public class Researcher {
    private final ResearchCallback callback;

    public Researcher(ResearchCallback callback) {
        this.callback = callback;
    }

    public void research(ResearchData data) {
        // quite a bit of logic goes here that builds the list of data...
        callback.discoveredResearch(data, mapOfDiscoveredStuff);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-27 18:45:30

您可以用对应于函数接口ResearchCallback的lambda主体替换您的匿名类。

接口功能的方法是:

代码语言:javascript
复制
void discoveredResearch(ResearchData data, Map<Object, String> discovered);

它接受两个对角,却什么也不返回。

所以像(data, discovered) -> {}这样的羔羊身体适合。

它将提供:

代码语言:javascript
复制
researchers.put(researcherName, new Researcher( (data, discovered) ->
        discovered.forEach((object, stringData) -> {
            // do something
        }));
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49520136

复制
相关文章

相似问题

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