gpt4 book ai didi

generics - 在 kotlin 中创建一个具有 Comparable 类型数组的泛型类?

转载 作者:行者123 更新时间:2023-12-03 12:54:36 28 4
gpt4 key购买 nike

灵感来自 Create generic 2D array in Kotlin ,我有下面的代码,它创建了一个类型为 T 的数组的泛型类。但是,一旦我添加了一个上限,就会出现编译错误。有没有办法做到这一点?

//This code compiles:
class GenericClass<T> protected constructor(size : Int, arrayFactory: (Int) -> Array<T>) {
companion object {
inline fun <reified T> invoke(size : Int)
= GenericClass(size, { size -> arrayOfNulls<T>(size) })
}
val array = arrayFactory(size)
}

//Compile errors:
class GenericClass<T : Comparator<T>> protected constructor(size : Int, arrayFactory: (Int) -> Array<T>) {
companion object {
inline fun <reified T : Comparator<T>> invoke(size : Int)
= GenericClass(size, { size -> arrayOfNulls<T>(size) })
}
val array = arrayFactory(max)
}

编译错误是:
  • 构造函数 GenericClass>(size: Int, arrayFactory: (Int) -> Array) 中为 T 绑定(bind)的类型参数不满足:推断类型 T?不是 Comparator
  • 的子类型

    最佳答案

    该错误消息虽然具有误导性,但确实暗示它与类型参数和参数的可空性约束有关。更改GenericClass允许 null 的构造函数里面 Array像这样:

    class GenericClass<T : Comparator<T>> 
    protected constructor(size : Int, arrayFactory: (Int) -> Array<T?>) {
    companion object {
    inline fun <reified T : Comparator<T>> invoke(size : Int)
    = GenericClass(size, { size -> arrayOfNulls<T>(size) })
    }
    val array = arrayFactory(size)
    }

    arrayOfNulls 顾名思义,创建给定 size 的数组充满 null s。因此,如果您想使用它, arrayFactory需要接受它。

    关于generics - 在 kotlin 中创建一个具有 Comparable<T> 类型数组的泛型类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38299468/

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