¿Cuál es la forma correcta de crear una nueva instancia de class genérica en kotlin?

Yo uso la siguiente initialization:

val entityClass = javaClass<Class<T>>() var entity = entityClass.newInstance().newInstance() 

pero está mal y causa IllegalAccessException en java.lang.Class.newInstance(Class.java:1208)

Si permite que IntelliJ agregue información de tipo explícito, verá que entityClass es en realidad del tipo Class<Class<String>> . No estoy seguro si eso es lo que quieres. En la línea 2, primero está creando una instancia de Class<T> y luego una de T pero eso no es posible de todos modos, porque la información genérica sobre T se pierde en el time de ejecución. Aparte de eso, no puedes instanciar objects de class directamente.

Solución

Una posible solución sería agregar un parámetro de tipo Class<T> a su function o class y usarlo para instanciar objects como este.

 fun <T> foo(entityClass: Class<T>) { var entity: T = entityClass.newInstance() } fun test() { foo(Object::class.java) } 

Pero en realidad hay una solución más elegante sin el uso de la reflexión. Defina un parámetro de tipo de método () -> T y use references de constructor. Aquí está mi pregunta relacionada sobre references de constructores y aquí está el código:

 fun <T> foo2(factory: () -> T) { var entity: T = factory() } fun test() { foo2(::Object) } 
  • Animación consecutiva en TornadoFX?
  • ¿Puedo aprovechar las Corutinas de Kotlin al usarlas en código Java?
  • La asignación de Firebase a Kotlin-Object no funciona
  • Creación de jar ejecutable / uber con maven desde proyecto mezclado con Java y Kotlin
  • IncompleteAnnotationException: dagger. Proporciona el tipo de elemento faltante
  • Cómo proporcionar datos de testing y classs en proyectos de gradle de varios modules
  • No se puede inicializar el button en el dialog en Kotlin
  • Error al detectar exception en la llamada asíncrona Anko (Kotlin)
  • ¿Necesito saber por qué? y si cambio esta línea a "println (nombre + dos)" ¿se ha resuelto el error?
  • Cómo extender desde una InnerClass en kotlin
  • herramientas de documentation automática de kotlin