在kotlin中创建一个类型为Comparable <T>的数组的泛型类?

受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的类型参数不满足:推断类型T? 不是比较器的子类型

误导性的错误信息暗示它是关于你的类型参数和参数的可空性约束。 更改GenericClass构造函数以允许Array内的null如下所示:

 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就是创建一个填充了null的给定size数组。 因此,如果你想使用它, arrayFactory需要接受它。