加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 这是设计中java lambda的限制

发布时间:2020-12-16 19:10:20 所属栏目:安全 来源:网络整理
导读:我想定义一个简单的lambda,加起来三个整数: (int a,int b,int c)-a+b+c 对于这个简单的情况,我有两个选择: 定义功能界面.单个抽象方法应该是int add(int a,int c),方法名称和varable名称无关紧要. 使用方法参考.我必须定义一个类/方法或使用具有签名int ad
我想定义一个简单的lambda,加起来三个整数:

(int a,int b,int c)->a+b+c

对于这个简单的情况,我有两个选择:

>定义功能界面.单个抽象方法应该是int add(int a,int c),方法名称和varable名称无关紧要.
>使用方法参考.我必须定义一个类/方法或使用具有签名int add的现有方法(int a,int c)

在这两种情况下,对于非常简单的lambda,我必须回到OOP世界(接口,类等)

但是在scala中,定义一个函数非常简单:
val add =(a:Int,b:Int,c:Int)=> a b c

解决方法

在Java中,必须将每个lambda表达式定位到特定的功能接口类型.这是设计的,在实践中它意味着功能不是语言的一等公民.

所以,是的,你必须回到OOP世界.

但是,您可以使用函数内置类型以其currified形式定义函数:

Function<Integer,Function<Integer,Integer>>> add =
    a -> b -> c -> a + b + c;

用法:

int result = add.apply(1).apply(2).apply(3); // 6

虽然我怀疑这根本不可读……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读