java.util.function中的Runnable表示是什么?
What is the Runnable representation in java.util.function?
我最近在想,Runnable 经常用在函数上下文中。同时根据javadoc,它的语义非常接近于多线程,但在这样的上下文中并没有被使用:
The Runnable interface should be implemented by any class whose
instances are intended to be executed by a thread. The class must
define a method of no arguments called run. This interface is designed
to provide a common protocol for objects that wish to execute code
while they are active. For example, Runnable is implemented by class
Thread. Being active simply means that a thread has been started and
has not yet been stopped.
Runnable
等同于 Supplier<Void>
吗?或者 Runnable
等同于 Function<Void,Void>
并且为什么它不是 Supplier 那么? Runnable 如何与 java.util.function 包对齐已经呈现的功能接口。
Runnable
就是了。有一个有意的选择(参见 Brian Goetz here)不向 java.util.function
包添加功能接口,这实际上等同于 Runnable
。 Java 的 lambda 实现背后的主要思想之一(它的所有使用必须在需要某些功能接口的地方,然后 lambda 成为该功能接口的实现)旨在确保Java post-lambda 或多或少与 API 设计的 pre-lambda 兼容,没有任何真正需要发布具有更多 [=34] 的不兼容 'v2' 版本=]8+ 风格 API 现有的大多数 API。
引入 Runnable
的一个变体只是为了它存在于 java.util.function
包中 运行 与这个想法背道而驰。
请注意,Runnable
和 Supplier<Void>
以及 Function<Void, Void>
可能感觉非常相似,但在 javaland 中完全不兼容。 Void
并不特别;它只是一种类型,与其他类型相同。例如,如果你正在制作一个 Supplier<Void>
lambda,你实际上需要 return 一些东西,而你只能 return null
;没有 non-hacky 方法来创建 Void
类型的实例。而对于 void
,您不必(也不能)。
我最近在想,Runnable 经常用在函数上下文中。同时根据javadoc,它的语义非常接近于多线程,但在这样的上下文中并没有被使用:
The Runnable interface should be implemented by any class whose instances are intended to be executed by a thread. The class must define a method of no arguments called run. This interface is designed to provide a common protocol for objects that wish to execute code while they are active. For example, Runnable is implemented by class Thread. Being active simply means that a thread has been started and has not yet been stopped.
Runnable
等同于 Supplier<Void>
吗?或者 Runnable
等同于 Function<Void,Void>
并且为什么它不是 Supplier 那么? Runnable 如何与 java.util.function 包对齐已经呈现的功能接口。
Runnable
就是了。有一个有意的选择(参见 Brian Goetz here)不向 java.util.function
包添加功能接口,这实际上等同于 Runnable
。 Java 的 lambda 实现背后的主要思想之一(它的所有使用必须在需要某些功能接口的地方,然后 lambda 成为该功能接口的实现)旨在确保Java post-lambda 或多或少与 API 设计的 pre-lambda 兼容,没有任何真正需要发布具有更多 [=34] 的不兼容 'v2' 版本=]8+ 风格 API 现有的大多数 API。
引入 Runnable
的一个变体只是为了它存在于 java.util.function
包中 运行 与这个想法背道而驰。
请注意,Runnable
和 Supplier<Void>
以及 Function<Void, Void>
可能感觉非常相似,但在 javaland 中完全不兼容。 Void
并不特别;它只是一种类型,与其他类型相同。例如,如果你正在制作一个 Supplier<Void>
lambda,你实际上需要 return 一些东西,而你只能 return null
;没有 non-hacky 方法来创建 Void
类型的实例。而对于 void
,您不必(也不能)。