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.

  • El uso de Kotlin "apply in companion object" arroja un error inesperado
  • Cómo mostrar el mes holandés usando Joda DateTime
  • Llamadas a function de logging usando reflexión en kotlin
  • reference no resuelta a class, methods
  • ¿Cómo hacer un grupo? ¿Por qué coleccionar usando RxJava y Kotlin?
  • Cómo configurar NDK con Kotlin en Android Studio 3.0
  • Android studio 2.3: no se pudo inicializar la class org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
  • Argumento de tipo explícito Kotlin y RxJava
  • Kotlin Dagger2 no puede encontrar el símbolo ApplicationModule_ProvideApplicationFactory
  • ¿Forma funcional de acumular dentro de una function de Unidad en Kotlin?
  • ¿Qué tipo de time de compilation debo asignar para recibir un valor de retorno de java.util.Map <TextAttribute,?>