Tipo de instancia con genéricos dinámicamente

Supongo que no hay forma de que pueda hacer algo como:

Class c = Class.forName("Processor<Integer, String>");

en Java (donde definí el procesador previamente, por supuesto).

Respuesta 1

Absolutamente de ninguna manera, ya que los argumentos genéricos pueden existir solo en tiempo de compilación. ClassEl objeto es el mismo en tiempo de ejecución. No es una plantilla de clase como en C ++. Los parámetros de tipo son solo información para el compilador de Java.

Puede intentar lograr algo similar creando una clase:

class IntStringProcessor extends Processor<Integer, String> {}

y Class c = Class.forName("IntStringProcessor");

En tiempo de ejecución, puede obtener Processorparámetros de tipo reales a través de, c.getGenericSuperclass()pero esto extiende la pregunta, supongo.

EDITAR : otra idea

Su Processorpuede mantener classess como parámetros y, a continuación:

Class c1 = Class.forName("java.lang.Integer");
Class c2 = Class.forName("java.lang.String");
Processor = new Processor(c1,c2);

Su procesador ahora no es genérico pero usa instancias de clase dentro. Como dije, no hay forma de crear una instancia genérica en tiempo de ejecución porque los genéricos existen solo en tiempo de compilación.

Respuesta: 2

Estoy usando el marco restassured, y dentro de él, tiene la clase JsonPath. JsonPath tiene una firma de método de getList (ruta de cadena, clase T); Intenté hacer algo como esto: List <JsonPath & ...

Tengo una aplicación rcp que tiene barras de expansión y, aunque los colores y fondos predeterminados se ven bien en Windows 7, mis clientes que usan Windows XP tienen una aplicación bastante fea. Yo tengo ...

Mi aplicación Java almacena su información en la base de datos MySql versión 8. La información del usuario y la contraseña se almacenan en esta base de datos. Estoy implementando una prueba de integración para probar el método que ...

Mi código dice que no hay errores, pero cuando vaya a ejecutar el programa, dirá que la base de datos se ha cerrado. public class main {public static void main (String [] args) {// language = SQLite ...