微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Lambda和闭包

如何解决Java Lambda和闭包

Lambda表达式只是用于实现目标接口的语法糖,这意味着您将通过lambda表达式在接口中实现特定方法。编译器可以推断接口中参数的类型,这就是为什么您不需要在lambda表达式中显式定义它们的原因。

例如:

Comparator<String> c = (s1, s2) -> s1.comparetoIgnoreCase(s2);

在此表达式中,lambda表达式显然实现了Comparator字符串a,因此,这意味着lambda表达式是用于实现的语法糖compare(String, String)

因此,编译器可以安全地假设s1and 类型s2String

您的目标接口类型提供了编译器确定lambda参数的实际类型需要的所有信息。

Oracle Corportion的Java语言架构师Briant Goetz发表了一些有关JDK 8 Lambdas正在进行的工作的文章。我相信您的问题的答案在那里:

第二篇文章介绍了如何在字节码级别实现lambda表达式,并可以帮助您深入研究第二个问题的细节。

解决方法

我听说lambda即将传到您附近的Java(J8)。我在某个博客上找到了一个示例,说明了它们的外观:

SoccerService soccerService = (teamA,teamB) -> {
    SoccerResult result = null;
    if (teamA == teamB) {
        result = SoccerResult.DRAW;
    }
    else if(teamA < teamB) {
        result = SoccerResult.LOST;
    }
    else {
        result = SoccerResult.WON;
    }

    return result;
};

所以马上开始:

  • 在哪里teamAteamB类型?还是不是(像某种奇怪的泛型形式)?
  • Lambda是 一种 封闭 类型 ,还是相反?
  • 与典型的匿名功能相比,这将给我带来什么好处?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。