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对象
PIPIONE
TA贡献1829条经验 获得超9个赞
首先 Runnable接口就是一个函数式接口 , 函数式接口都可以通过lambda表达式来达到行为参数化的目的 ; 意思就是说本来你是需要一个Runnable 类型作为参数 , 但是你不想新建一个类去实现Runnable接口 , 或者使用匿名内部类去 new 一个Runnable的实现 , 那么lambda表达式可以帮你解决这些麻烦 . 而且函数式接口只能有一个抽象方法 (不算默认方法) , 所以你调用的就是这个方法 ; 这个是java8 开始支持的 , 很值得去学习一下 , 不知道我有没有讲清楚
添加回答
举报
0/150
提交
取消