受Kotlin中创建通用2D数组的启发,我有以下代码创建带有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
构造函数以允许在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
需要接受它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句