Genéricos de la colección Java anidados

Me gustaría llamar a un método definido como

<T> void foo(Class<? extends Collection<T>>)

pero no hay forma de que el compilador me deje pasar

foo(ArrayList<Integer>.class);

¿Cuál es la sintaxis para obtener la clase de tipo de un tipo genérico?

Estoy implementando el caso común donde tengo un

Map<Key, Collection<Value>>

y desea insertar un valor en la colección. Si la colección no existe, debe crear una nueva e insertar el valor en ella. Hasta ahora tengo el siguiente código, pero con advertencias de seguridad de tipo:

public static <K, V, C extends Collection<V>> boolean addToMappedCollectionNotNull(Map<K, C> aMap, K key, V element, Class<? extends Collection> type) {
    C collection = aMap.get(key);
    if (collection == null) {
        try {
            collection = (C)type.newInstance();
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        }
        aMap.put(key, collection);
    }

    return collection.add(element);
}
Respuesta 1

Como dijo Boris , probablemente estés buscando un MultiMap. Pero si cree que tiene que transportar la información de tipo, el token de súper tipo es una solución. Guice tiene una implementación TypeLiteral que puede ver.

Respuesta: 2

Se puede lograr el mismo objetivo utilizando la biblioteca Guava de Google . Hay una interfaz Multimap<K, V>que asocia una colección de valores Va una clave K.

Una colección similar a un Mapa, pero que puede asociar múltiples valores con una sola clave. Si llama put(K, V) dos veces, con la misma clave pero con valores diferentes, el mapa múltiple contiene asignaciones de la clave a ambos valores.

Multimapes implementado por un ListMultimap, SetMultimapy SortedSetMultimapque cubre todas las necesidades posibles para el conjunto de valores V.

Respuesta: 3

Así que tengo este WebElement (ahora en modo deshabilitado): <select id = "id1" name = "name" disabled = ""> <option value = ""> Seleccione ... </option> <option value = "false "> No </option> <...

Actualmente estoy desarrollando una aplicación de Android que interactúa con un servicio web RESTful. El cliente puede realizar CRUD completo en el servicio web. Después de buscar las mejores prácticas vi Google I / O ...

Tengo una biblioteca de clases que contiene aproximadamente 10 dll escritas en C # 3.0 / .NET 3.5. La biblioteca proporciona acceso API a mi producto que ejecuta un servidor remoto. La comunicación se realiza mediante sockets TCP. YO ...

En el código: HttpURLConnection connection = (HttpURLConnection) createMerchURL.openConnection (); connection.setRequestMethod ("PUT"); connection.addRequestProperty ("Nombre", "Valor1"); conexión....