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.

  • RxJava2 Publicado
  • Combustible TimeOut Connection
  • Kotlin: anexar text y cerrar resources
  • ¿Cómo llamo a un método en Kotlin con un límite superior diferente?
  • Android: no se puede actualizar Listview usando CustomAdapter
  • Errores al convertir Java a código de Kotlin
  • IDEA IllegalStateException: el service se está agotando al ejecutar la testing JUnit con Kotlin
  • ¿Regex o comodín en la statement de Kotlin cuando?
  • Referencias circulares con vals en Kotlin
  • While loop en el lenguaje de progtwigción Kotlin
  • Ejecutar testings unitarias no capta cambios