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.

  • delegar la invocación de cierre nested a la class correspondiente
  • Cómo hacer una list KOTLIN con lists de corchetes API JSON
  • Kotlin: Equivalente de getClass () para KClass
  • ¿Cómo establecer el atributo de peso de forma dinámica desde el código de Kotlin?
  • Seleccionar image de la galería usando Kotlin
  • Soporte de Lost Kotlin en Intellij Idea 14.1
  • Cómo establecer la propiedad de Kotlin tardía en nulo
  • Asignación y recuperación de maps de tipo seguro
  • Configurando Kotlin en el nuevo Android Studio Project
  • Diseño inflado por progtwigción con las extensiones de Kotlin para Android
  • ¿Por qué mis NewIssues adicionales no se transfieren a sonar? (Complemento Sonar personalizado)