¿Puedes tener un constructor primario genérico en Kotlin?

Esto funcionaría:

class Generic<T, R>(thingy: R) { val x = thingy.getX() } 

Pero el parámetro R realidad no debería ser parte de la firma de class. Es relevante solo en el momento de la construcción. De la misma forma que un parámetro de tipo de un método genérico no tiene nada que ver con los parameters de tipo de la class.

Sin embargo, esto no funciona:

 class Generic<T>(thingy: R) { val x = thingy.getX() } 

tampoco hace esto:

 class Generic<T><R>(thingy: R) { val x = thingy.getX() } 

y no encontré la respuesta en la documentation .

Eso no es posible directamente.

Sin embargo, puede lograr un resultado deseado utilizando un método de fábrica:

 interface HasX<out V> { val x: V } class Generic<T>(val x: Int) { companion object { fun <T, R : HasX<Int>> create(thingy: R) = Generic<T>(thingy.x) } } val result: Generic<String> = Generic.create(object : HasX<Int> { override val x: Int = 12 }) 

Por lo general, los methods de fábrica comienzan con minúsculas (p mutableList Ej., mutableList ); no hay nada que te mutableList hacer las cosas de manera diferente:

 fun <T, X : HasX<Int>> Generic(thingy: X):Generic<T> = Generic(thingy.x) val result: Generic<String> = Generic(object : HasX<Int> { override val x: Int = 12 }) 

Según lo observado por @Alexey Romanow, partes de Kotlin stdlib usan este enfoque .

  • No se puede crear una instancia de actividad | Causado por: kotlin.KotlinNullPointerException
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • No puedo usar Kotlin para Serenity-bdd
  • Comience un proyecto con la ayuda de Kotlin en Android
  • No se puede encontrar el cuerpo de destino después de ejecutar una aplicación web de Jfinal con kotlin
  • IOException: AsyncTask Image Descargar Kotlin Android (Bad File Descriptor)
  • ¿Cómo puedo crear un radiogrupo 2x2?
  • Encienda un byte
  • Llamar a REST api en el emulador de Android hace que la aplicación se cuelgue
  • El parámetro de tipo Force es invariante en el sitio de uso cuando es covariante en el sitio de statement
  • ¿Lees múltiples inputs de la misma línea en Kotlin?