Saltar al contenido

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

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *