Contenedor de tipos genéricos en java

Tengo una clase genérica Foo<T>y tipos parametrizados Foo<String>y Foo<Integer>. Ahora quiero poner diferentes tipos parametrizados en un solo ArrayList. ¿Cuál es la forma correcta de hacer esto?

Candidato 1:

public class MMM {
    public static void main(String[] args) {
        Foo<String> fooString = new Foo<String>();
        Foo<Integer> fooInteger = new Foo<Integer>();

        ArrayList<Foo<?> > list = new ArrayList<Foo<?> >();
        list.add(fooString);
        list.add(fooInteger);

        for (Foo<?> foo : list) {
            //  Do something on foo.
        }
    }
}
class Foo<T> {}

Candidato 2:

public class MMM {
    public static void main(String[] args) {
        Foo<String> fooString = new Foo<String>();
        Foo<Integer> fooInteger = new Foo<Integer>();

        ArrayList<Foo> list = new ArrayList<Foo>();
        list.add(fooString);
        list.add(fooInteger);

        for (Foo foo : list) {
            //  Do something on foo.
        }
    }
}
class Foo<T> {}

En una palabra, está relacionado con la diferencia entre Foo<?>y el tipo sin formato Foo.

Actualizar:

Grep ¿Cuál es la diferencia entre el tipo parametrizado comodín ilimitado y el tipo sin formato? En este enlace puede ser útil.

Respuesta 1

Listrepresenta una lista sin parámetro de tipo. Es una lista cuyos elementos son de cualquier tipo, por ejemplo, los elementos pueden ser de diferentes tipos. Es básicamente lo mismo que List<Object>.

Mientras tanto, List<?>representa una lista con un parámetro de tipo ilimitado. Sus elementos son de un tipo específico, pero desconocido (antes del tiempo de ejecución). Todos estos elementos deben ser del mismo tipo en tiempo de ejecución.

Recomiendo evitar el uso de tipos sin procesar. La solución adecuada para su ejemplo es List<Foo<?>>.

Respuesta: 2

Estoy usando JPBM para diseñar un flujo de proceso, con BPMN2. Quiero crear una instancia de un objeto de clase en una Tarea de script, por ejemplo: Map <String, Object> params = new HashMap <String, Object> (); ...

Soy bastante nuevo en Guava API y estoy tratando de ordenar las claves de un MultiMap en orden inverso o valor descendente. Estoy iniciando el mapa de la siguiente manera: ListMultimap <Fecha, Mapa <Cadena, Cadena y ...

Tengo una clase simple para fines ilustrativos: prueba de clase pública {public int test1 () {int result = 100; resultado = 200; resultado de retorno; } public int test2 (...

Si declaro una variable antes o sin declarar constantes enum de esta manera: enum MyEnum {int i = 90; } Muestra el siguiente error de compilación. MyEnum.java:3: <identificador> esperado {^ ...