Consulte el tipo genérico en Kotlin

Con la siguiente estructura de class:

abstract class GenericClass<T: Fragment> { protected lateinit var fragment: T fun anOperation(){ //do something } } class ConcreteA: GenericClass<AFragment> { } class ConcreteB: GenericClass<BFragment>{ } 

¿Cómo puedo conseguir esto?

 fun useFragment(f:GenericClass){ f.anOperation() } 

Cuando declaro la function useFragment , obtengo " One type argument expected for class GenericClass "

Le das al método su propio argumento de tipo:

  fun <T> useFragment (f: GenericClass <T>) {
    f.anOperation ()
 } 

Observe la <T> después de la fun .

Kotlin no tiene types brutos, por lo que debe especificar un tipo genérico para GenericClass . También puedes usar el comodín:

 fun useFragment(f: GenericClass<*>) { f.anOperation() } 

En este caso, no hay diferencia.

Además, la inheritance en su pregunta no es válida: GenericClass es una class final y no se puede extender. Debe agregar el modificador open a GenericClass .

Incluso podría querer que sea abstract , ya que no parece que deba usarse solo.

  • Javafx by kotlin salió mal cuando lo exporté a un file ejecutable
  • Clase de datos KotlinReflectionInternalError
  • Forma rápida de inicializar la class Kotlin secundaria con las properties de instancia de la class principal
  • Fundición genérica de Kotlin a una subclass más específica
  • time de espera de connection: conectar consultar logging de IDE
  • Android: Kotlin con Dagger
  • Inferir un tipo genérico de Mapa en Kotlin
  • Kotlin obtiene la anotación de campo siempre vacía
  • ¿Conversión de Kotlin SAM con una interfaz Java interna privada?
  • En Kotlin, ¿es posible cambiar la delegación en Runtime?
  • Método hashMapOf () en Kotlin