猿问

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

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();

这样写好像不对哦


牛魔王的故事
浏览 546回答 3
3回答

收到一只叮咚

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

PIPIONE

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

人到中年有点甜

就是参数列表啊,new thread不需要传入参数所以()是对的。。。
随时随地看视频慕课网APP

相关分类

Java
我要回答