Crear una class genérica con una matriz de tipo Comparable <T> en kotlin?

Inspirado por Crear matriz bidimensional genérica en Kotlin , tengo el siguiente código que crea una class genérica con una matriz de tipo T. Sin embargo, una vez que agrego un límite superior, aparece un error de compilation. ¿Hay alguna forma de hacer esto?

//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) } 

Los errores de compilation son:

  • El parámetro type para T en el constructor GenericClass> (size: Int, arrayFactory: (Int) -> Array) no se cumple: ¿tipo inferido T? no es un subtipo de Comparador

El post de error, aunque es engañoso, sugiere que se trata de restricciones de nulabilidad de los arguments y parameters de tipo. Cambie el constructor GenericClass para permitir el null dentro de la Array así:

 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 como el nombre sugiere crea una matriz de un size dado lleno de null s. Por lo tanto, si desea usarlo, arrayFactory debe aceptarlo.

  • Android no ha podido crear instancias de una o más classs
  • Kotlin, JPA y @Transient
  • Bloque de initialization estática en Kotlin
  • Deserializador de logging para una list envuelta de tipo
  • Cómo ejecutar el command bash en Kotlin
  • Seguridad de spring. Redirigir a la página protegida después de la authentication
  • android anko alert layout personalizado currentFocus
  • Kotlin, cómo probar (int) array
  • Constructor vacío para el object kotlin para usar Firebase
  • firebase putfile en kotlin
  • Cómo crear variables en el context principal