Ale*_*rov 0 java lambda functional-programming runnable java-8
最近,我想知道Runnable经常在功能上下文中使用。同时,根据javadoc,它的语义非常接近多线程,但在这种情况下并没有使用它:
Runnable接口应该由实例打算由线程执行的任何类实现。该类必须定义一个没有参数的方法,称为run。该接口旨在为希望在活动状态下执行代码的对象提供通用协议。例如,Runnable由Thread类实现。处于活动状态仅表示线程已启动但尚未停止。
是Runnable
相当于Supplier<Void>
?或Runnable
等同于Function<Void,Void>
,为什么不是供应商呢?Runnable如何与已经提供的功能接口的java.util.function包对齐。
Runnable
是吗。有一个故意的选择(请参见Brian Goetz),不要在java.util.function
软件包中添加与等效的功能接口Runnable
。Java实现lambda背后的主要思想之一(所有使用都必须在需要某些功能接口的地方,然后lambda才成为该功能接口的实现的思想)旨在确保Java post-lambda是或多或少与lambda之前设计的API兼容,而实际上不需要发布不兼容的“ v2”版本,该版本具有适用于大多数现有API的更多Java8 +风格的API。
引入一个Runnable
单独的变体以使其存在于java.util.function
软件包中将与该想法背道而驰。
请注意,Runnable
和Supplier<Void>
和Function<Void, Void>
可能感觉非常相似,但在javaland中完全不兼容。Void
不特别 它只是一种类型,与其他类型相同。例如,如果您要制作Supplier<Void>
lambda,则实际上需要返回一些东西,并且只能返回null
; 没有非hacky的方法来创建该Void
类型的实例。而对于void
,您不必(也不能)。
归档时间: |
|
查看次数: |
134 次 |
最近记录: |