java.util.function中的Runnable表示是什么?

时间:2019-06-29 09:45:45

标签: java lambda java-8 functional-programming runnable

最近我想知道Runnable经常在功能上下文中使用。同时,根据javadoc,其语义非常接近于多线程,而在这种情况下并没有使用它:

  

Runnable接口应该由其   实例旨在由线程执行。上课必须   定义一个没有参数的方法称为run。该接口是专为   为希望执行代码的对象提供通用协议   他们活跃的时候。例如,Runnable由类实现   线。处于活动状态仅意味着已启动线程,并且   尚未停止。

Runnable等于Supplier<Void>吗?还是Runnable等效于Function<Void,Void>,为什么它不是供应商呢? Runnable如何与已经提供的功能接口的java.util.function包对齐?

1 个答案:

答案 0 :(得分:7)

Runnable就是它。有一个故意的选择(请参见Brian Goetz here),而不是向java.util.function包中添加等效于Runnable的功能接口。 Java实现lambda背后的主要思想之一(所有使用都必须在需要某些功能接口的地方,然后lambda成为该功能接口的实现的思想)旨在确保Java post-lambda是或多或少与lambda之前设计的API兼容,而无需真正发布适用于大多数现有API的不兼容的“ v2”版本和更多的Java8 +样式的API。

仅为Runnable包中的存在而引入java.util.function的变体将与该想法背道而驰。

请注意,RunnableSupplier<Void>Function<Void, Void>可能看起来非常相似,但在javaland中完全不兼容。 Void并不特殊;它只是一种类型,与其他类型相同。例如,如果您要制作Supplier<Void> lambda,则实际上需要返回某些内容,而只能返回null;没有任何非骇客的方式来制作Void类型的实例。而对于void,则不必(也不能)。