gpt4 book ai didi

kotlin - Kotlin 中的 "Any"上限与默认值(无界限)有何不同?

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

此代码无法编译,并在 KClass 类型上出现错误:

interface Foo<T> {
val tClass: KClass<T>
}

Type argument is not within its bounds. Expected: Any, Found: T


这就是说 KClass 需要 Any 类型参数,但 T 不是 Any。
那么这些有什么区别呢?
  • <T>
  • <T: Any>
  • <T: Any?>
  • 最佳答案

    为了解释这一点,最好从 Java 与 Kotlin 的类型系统之间的差异开始。
    在 Java 中,所有类都继承自 Object,并且 Object 可以为 null 或不为 null。在 Kotlin 中,可空类型和不可空类型是有区别的。默认情况下,基本类型是 Any?因此<T>默认为 Any? 类型.由于您传入的是不可为空的类型,因此您需要声明 <T: Any>而不是 Any? .
    因此<T><T: Any?> 相同和 <T: Any>说只有一个类型可以传递给这个不可为空的方法。

    关于kotlin - Kotlin 中的 "Any"上限与默认值(无界限)有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63535390/

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