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.

  • Crear una instancia de una cadena?
  • Enfoque correcto para la class de Kotlin inyectada de constructor inmutable
  • RecyclerView animation de elementos, se llama AnimationFinished, pero no está activado en AnimationStarted. ¿Por qué?
  • ¿Por qué esta aplicación Spring Boot no puede encontrar la página principal?
  • ¿Cómo arreglar mi código para eliminar la advertencia de lanzamiento?
  • Kotlin ve el nombre completo del tipo de object en el estudio de Android en Mac OS
  • ¿Cuál es el equivalente de Kotlin de String de Java?
  • Cómo pasar la class kotlin o la instancia de la class kotlin como arguments
  • Kotlin REST a las definiciones de mecanografía
  • Escribir un Inputstream grande para archivar en Kotlin
  • Spring Data Elasticsearch con Script Field con Kotlin Data Class da como resultado un problema de serialization de Jackson