"()->System.out.println("done")" 的意思是什么?(涉及IT技术)

5
Concurrency Interest 链接中,有一段代码如下:-
exec.schedule( ()-> System.out.println("done"),
         1, TimeUnit.SECONDS );

()->是什么意思?

我在Eclipse中检查过,它不允许。但是线程作者的意图是什么?


4
这是Java 8。Runnable#run()不带参数。 - Sotirios Delimanolis
1
颤抖。如何通过12个简单步骤使Java代码难以阅读... - Gray
1
@Gray 哎,别这样。试着用一天,你就会感觉很舒适了。 - Sotirios Delimanolis
1
哦,我知道我可以逐渐习惯它@SotiriosDelimanolis。我只是认为为了节省字符而使用这种方式会降低语言的可读性。这是一种可爱的语言特性,但我不确定它是否会提高代码的可维护性。 - Gray
3
我认为使用更加富有表现力的语言会更好,但这并不能提高可维护性。然而,我不认为Lambda 函数仅仅是为了这个目的而创建的。 - Sotirios Delimanolis
显示剩余2条评论
2个回答

10

这是来自JDK8的Lambda语法。

它与以下语法非常相似(但不完全相同):

exec.schedule(new Runnable() { 
    public void run() {
        System.out.println("done");
    }
}, 1, TimeUnit.SECONDS);

7
那就是Java 8语法中用于Lambda表达式的语法ScheduledThreadPoolExecutor#exec(..)方法需要一个Runnable参数。Runnable是一个功能性接口,因为它只包含一个抽象方法。因此,编译器可以推断您正在使用lambda定义一个新的Runnable实例。 ()之间的部分是run()方法的参数,即没有参数。->后面的部分是方法的主体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接