Esta cuestión se puede tratar de variadas formas, por lo tanto te dejamos la resolución más completa para nosotros.
Solución:
Si permite que IntelliJ agregue información de tipo explícito, verá que entityClass
en realidad es de tipo Class
. No estoy seguro si eso es lo que quieres. En la línea 2, primero está creando una instancia de Class
y luego uno de T
pero eso no es posible de todos modos, porque la información genérica sobre T
se pierde en tiempo de ejecución. Aparte de eso, no puede crear instancias de objetos de clase directamente.
Solución
Una posible solución sería agregar un parámetro de tipo Class
a su función o clase y utilícelo para instanciar objetos como este.
fun foo(entityClass: Class)
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. Definir un parámetro de tipo de método () -> T
y usar referencias de constructor. Aquí está mi pregunta relacionada con las referencias de constructores y aquí está el código:
fun foo2(factory: () -> T)
var entity: T = factory()
fun test()
foo2(::Object)
Aquí puedes ver las reseñas y valoraciones de los lectores
Al final de la artículo puedes encontrar las notas de otros desarrolladores, tú también eres capaz insertar el tuyo si te apetece.