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.

  • Referencia no resuelta en Android Studio 3 Canary
  • ¿Cómo obtengo el resultado de una function de pepino?
  • gradle no puede comstackr Google Places API
  • Android Studio Versión 3.0 Canary Channel Not Rendering Support Libraries
  • Henetworkingar class con constructor primario
  • COROUTINE_SUSPENDED y suspendCoroutineOrReturn en Kotlin
  • Kotlin Android Button.onClickListener que causa NoSuchMethodError
  • Llamar a una function en un fragment de un buscapersonas de la actividad
  • ¿Cuál es la razón para usar el sufijo "Kt" en las classs de Kotlin?
  • Diferencia entre varias funciones verifySignatures en la testing de unidad de flujo Corda
  • retroajuste + desnerializador gson: retorno dentro de la matriz