Escritura genérica dinámica en Java

Si tengo una clase que usa un tipo genérico como

public class Record<T> {
    private T value;

    public Record(T value) {
        this.value = value;
    }
}

es bastante sencillo escribir todo durante el tiempo de diseño, si conozco todos los tipos que se usan, como es el caso en este ejemplo:

// I type explicitly
String myStr = "A";
Integer myInt = 1;
ArrayList myList = new ArrayList();

Record rec1 = new Record<String>(myStr);
Record rec2 = new Record<Integer>(myInt);
Record rec3 = new Record<ArrayList>(myList);

¿Qué sucede si obtengo una lista de objetos de "algún lugar" donde no conozco el tipo? ¿Cómo asigno el tipo?

// now let's assume that my values come from a list where I only know during runtime what type they have

ArrayList<Object> myObjectList = new ArrayList<Object>();
    myObjectList.add(myStr);
    myObjectList.add(myInt);
    myObjectList.add(myList);

    Object object = myObjectList.get(0);

    // this fails - how do I do that?
    new Record<object.getClass()>(object);
Respuesta 1

Los genéricos de Java no son plantillas de C ++.

Los genéricos de Java son una característica de tiempo de compilación, no una característica de tiempo de ejecución.

Aquí hay un enlace al Tutorial de genéricos de Java .

Esto nunca puede funcionar con Java:

new Record<object.getClass()>(object);

Debe usar el polimorfismo (por ejemplo, cada objeto implementa una interfaz conocida) o RTTI (instanceof o Class.isAssignableFrom ()).

Puedes hacer esto:

     class Record
     {
       public Record(String blah) { ... }
       public Record(Integer blah) { ... }
       ... other constructors.
     }

o puede usar el patrón de Constructor .

Respuesta: 2

Estoy ejecutando un programa simple de comparación de patrones exactamente como en test_harness Información: java: Se produjeron errores al compilar el módulo 'demo_java8' Información: se utilizó javac 1.8.0_121 para compilar java ...

Por ejemplo, dada una cadena de Battle of the Vowels: Hawaii vs Gronzy cuando especificamos los caracteres que se eliminarán como aeiou, la función debe transformar la cadena a Bttl f th V wls: Hw vs Grzny. Encontró ...

Encontré el problema de tener el mismo .jar (para mi caso, el-api.jar v2.1) dos veces para un proyecto, por lo tanto, la siguiente pila de errores cuando intento ejecutar mi proyecto usando Tomcat 6. ADVERTENCIA: .. .

Aquí hay una excepción que obtenemos cuando intentamos compilar un código recién extraído en Windows Server 2003 con Maven 2.2.1 y JDK 1.6.0_23. Varias máquinas que ejecutan Ubuntu con el mismo Maven y JDK ...