【问题标题】:Generic function in KotlinKotlin 中的通用函数
【发布时间】:2019-03-08 08:55:54
【问题描述】:

在 Kotlin 中,您可以使用这样的通用函数:

fun <T> singletonList(item: T): List<T> {
    // ...
}

我不明白 fun 关键字后面的 &lt;T&gt; 的目的是什么。函数返回List&lt;T&gt;,那么&lt;T&gt;的意义何在?

【问题讨论】:

标签: kotlin


【解决方案1】:

为了能够创建泛型函数,编译器必须知道您想要使用不同的类型。 Kotlin(如 Java 或 C#)是一种强类型语言。所以只是将不同的类型传递给一个函数会让编译器发疯。

要告诉编译器一个函数应该接受多种类型,你需要添加一个“类型参数”

fun 后面的&lt;T&gt; 是上述“类型参数”的定义。
然后用于item 参数。

现在编译器知道当您调用 singletonList(item: T) 时您将指定 item 的类型

只是在做

fun singletonList(item: T) : List<T> {[...]}

会使编译器不高兴,因为它不知道T
(只要你没有名为T 的类)

当你用逗号分隔它们时,你也可以有多个“类型参数”:

fun <T, U> otherFunction(firstParam: T, secondParam: U): ReturnType

【讨论】:

  • 还不清楚。该函数已经有一个类型参数(项目:T)。
  • 不,如果你只写func funcName(item: T),编译器会生你的气,因为它不知道T...这就是为什么你需要前面的&lt;T&gt;。这就是告诉编译器 T 是 TypeParam 的原因。 (item: T) 是用法,&lt;T&gt; 是定义
  • 好的。那么如何定义一个有 3 个参数且第一个和最后一个是类型 T 和 U 的函数呢?
  • fun &lt;T, U&gt; funcName(firstParam: T, second: AnotherType, third: U): ReturnType
【解决方案2】:

这是一个通用函数,根据语言的语法要求,需要提供这部分&lt;T&gt;。您可以使用它进一步指定T

fun <T: Number> singletonList(item: T): List<T> {
    // ...
}

拥有多个泛型类型也很常见:

fun <T: Number, R: Any> singletonList(item: T): R {
    // ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多