gpt4 book ai didi

Kotlin Runnable 与 () -> Unit

转载 作者:行者123 更新时间:2023-12-05 02:48:50 25 4
gpt4 key购买 nike

这两者之间的主要区别是什么?

例如,当创建自定义类时,它处理线程应该做什么,我有 2 个选项:

class ThreadHandler : Runnable {
private val thread = Thread(this)

override fun run() {}
}

class ThreadHandler : () -> Unit {
private val thread = Thread(this)

override fun invoke() {}
}

我要求:

  1. 各有优缺点(因为我相信Runnable的实现和“() -> Unit”的扩展)
  2. 在这种情况下,哪种是首选的使用方式

最佳答案

差异主要在于语言支持、互操作性、历史和用法。

() -> Unit 是一种 Kotlin 类型,表示一个不带参数且不返回任何有用信息的函数。这些函数类型是 Kotlin 的基础,并在整个标准库中使用,因此您可以将其传递给无数扩展函数。语言语法也支持它们;例如,您可以简单地附加 () 来运行它。

Runnable 是一个 Java 接口(interface),定义了一个不带参数且不返回任何有用信息的方法。 Java 没有一流的功能;相反,它使用接口(interface)获得了一些好处。 (从 Java 8 开始,它们被形式化为“功能接口(interface)”,并且可以在上下文提供足够信息的情况下由 lambda 实现;但是 Runnable 本身可以追溯到 Java 1.0。)它们的语言支持较少,因此您必须附加 .run() 才能运行它。此外,虽然它们是通用的,但 Runnable 通常用于为线程提供代码以执行,因此与该执行模型相关联。

因此,虽然这两个结构的意思大致相同,但前者看起来更自然并且与许多 Kotlin 代码的互操作性更好,而后者与旧的 Java 代码的互操作性更好并且倾向于用于线程。

并回答您的具体要点:

  1. 是的,作为一种类型,我认为 () -> Unit 在技术上是扩展的而不是实现的,但这里的区别并不显着。

  2. 除非您特别需要主要与较旧的 Java 代码进行互操作,否则我建议您使用 Kotlin 函数类型。

关于Kotlin Runnable 与 () -> Unit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64293254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com