为了账号安全,请及时绑定邮箱和手机立即绑定

lambda表达式 这句代码是什么意思呢?

lambda表达式 这句代码是什么意思呢?

牛魔王的故事 2019-04-25 18:15:14
new Thread(() -> {            try {                this.bind();            } catch (Exception e) {                log.info("TCP服务启动出错:{}", e.getMessage());                e.printStackTrace();            }        }, this.getName()).start();这个() -> 是什么意思哦 如果要改写 怎么改。网上说()相当与参数 -> 后面是方法或者表达式 new Thread( this.bind(),this.getName() ).start();这样写好像不对哦
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

new Thread( () -> { }, this.getName() ).start(); 这段代码可以这样看 , 首先是调用了Thread的构造函数去实例化对象 ,然后调用它的 start 方法.
这个构造函数有两个参数 , 其中一个必须是函数式接口 , 去Thread类中查找只能找到 Thread( Runnable , String) 这个构造函数满足要求. 
然后第一个参数是Runnable对象 , 他采用的是 lambda表达式来作为参数传递 , 而不是使用匿名内部类或者Runnable的实现类对象作为参数
因为Runnable接口是一个函数式接口 , 只有一个 run() 方法且没有参数 , 所以使用 () ->{ run方法具体实现代码 } lambda表达式 , 相当于你创建了一个Runnable对象

查看完整回答
反对 回复 2019-05-14
?
PIPIONE

TA贡献1829条经验 获得超9个赞

首先 Runnable接口就是一个函数式接口 , 函数式接口都可以通过lambda表达式来达到行为参数化的目的 ; 意思就是说本来你是需要一个Runnable 类型作为参数 , 但是你不想新建一个类去实现Runnable接口 , 或者使用匿名内部类去 new 一个Runnable的实现 , 那么lambda表达式可以帮你解决这些麻烦 . 而且函数式接口只能有一个抽象方法 (不算默认方法) , 所以你调用的就是这个方法 ; 这个是java8 开始支持的 , 很值得去学习一下 , 不知道我有没有讲清楚

查看完整回答
反对 回复 2019-05-14
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

就是参数列表啊,new thread不需要传入参数所以()是对的。。。


查看完整回答
反对 回复 2019-05-14
  • 3 回答
  • 0 关注
  • 545 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信