这两者之间的主要区别是什么?
例如,在创建自定义类(处理线程应该执行的操作)时,我有两个选项:
class ThreadHandler : Runnable {
private val thread = Thread(this)
override fun run() {}
}
Run Code Online (Sandbox Code Playgroud)
和
class ThreadHandler : () -> Unit {
private val thread = Thread(this)
override fun invoke() {}
}
Run Code Online (Sandbox Code Playgroud)
我要求:
差异主要在于语言支持、互操作性、历史和用法。
\n() -> Unit是 Kotlin 类型,表示不带参数且不返回任何有用内容的函数。\xc2\xa0 这些函数类型是 Kotlin 的基础,并且在整个标准库中使用,因此您可以将其传递给无数扩展函数。\xc2\ xa0 语言语法也支持它们;例如,您可以简单地附加()来运行它。
Runnable是一个 Java 接口,定义一个不带参数且不返回任何有用信息的方法。\xc2\xa0 Java 没有一流的函数;相反,它使用接口获得了一些好处。 \xc2\xa0 (从 Java 8 开始,这些被形式化为 \xe2\x80\x98 功能接口 \xe2\x80\x99 ,并且可以由 lambda 实现,其中上下文提供了足够的信息;但Runnable它本身可以追溯到 Java 1.0。)\xc2\xa0 对它们的语言支持较少,因此您必须附加.run()才能运行它。\xc2\xa0 另外,尽管它们是通用的,但经常使用 Runnable为线程提供要执行的代码,因此与该执行模型相关联。
因此,虽然这两个结构的含义大致相同,但前者看起来更自然,并且与大量 Kotlin 代码的互操作性更好,而后者与较旧的 Java 代码的互操作性更好,并且倾向于用于线程。
\n并回答您的具体观点:
\n是的,作为一种类型,我认为() -> Unit在技术上是扩展而不是实现,但这里的区别并不显着。
除非您特别需要主要与较旧的 Java 代码进行互操作,否则我建议使用 Kotlin 函数类型。
\n| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |