¿Existe alguna manera en Java de tener un mapa donde el parámetro de tipo de un valor esté vinculado al parámetro de tipo de una clave? Lo que yo quiero escribir es algo como lo siguiente:Mapa de Java con valores limitados por el parámetro de tipo de clave
public class Foo {
// This declaration won't compile - what should it be?
private static Map<Class<T>, T> defaultValues;
// These two methods are just fine
public static <T> void setDefaultValue(Class<T> clazz, T value) {
defaultValues.put(clazz, value);
}
public static <T> T getDefaultValue(Class<T> clazz) {
return defaultValues.get(clazz);
}
}
Es decir, puedo almacenar cualquier valor predeterminado contra un objeto de clase, siempre el tipo del valor coincide con el de la clase de objeto. No veo por qué no debería permitirse esto, ya que puedo garantizar al establecer/obtener valores que los tipos son correctos.
EDITAR: Gracias a cletus por su respuesta. En realidad, no necesito los parámetros de tipo en el mapa en sí, ya que puedo garantizar la coherencia en los métodos que obtienen/establecen valores, incluso si eso significa usar moldes ligeramente feos.
¿Qué sucede si el valor en sí es genérico? Por ejemplo, en lugar de almacenar 'String's y' int's, debe almacenar 'PrettyPrinter' donde 'T' es el token de tipo utilizado como clave en el mapa. –
Lucas
@Lucas Guava proporciona ['TypeToInstanceMap'] (https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/reflect/TypeToInstanceMap.html) para este propósito; junto con ['ClassToInstanceMap'] (https://github.com/google/guava/wiki/NewCollectionTypesExplained#classtoinstancemap) que replica la API' Favoritos' de Bloch. – dimo414