Existe-t-il un moyen en Java d'avoir une carte où le paramètre type d'une valeur est lié au paramètre type d'une clé? Ce que je veux écrire quelque chose comme ce qui suit:Carte Java avec des valeurs limitées par le paramètre de type de clé
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);
}
}
qui est, je peux stocker une valeur par défaut contre un objet de classe, à condition type de la valeur correspond à celle de l'objet de classe. Je ne vois pas pourquoi cela ne devrait pas être autorisé puisque je peux m'assurer lors de la configuration/obtention de valeurs que les types sont corrects.
EDIT: Merci à Cletus pour sa réponse. Je n'ai pas vraiment besoin des paramètres de type sur la carte elle-même, car je peux assurer la cohérence dans les méthodes qui obtiennent/définissent des valeurs, même si cela implique d'utiliser des distributions légèrement laides.
Et si la valeur elle-même était générique? Par exemple, au lieu de stocker 'String's et' int's vous devez stocker 'PrettyPrinter' où 'T' est le jeton de type utilisé comme clé dans la carte? –
Lucas
@Lucas Guava fournit ['TypeToInstanceMap'] (https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/reflect/TypeToInstanceMap.html) à cette fin; avec ['ClassToInstanceMap'] (https://github.com/google/guava/wiki/NewCollectionTypesExplained#classtoinstancemap) qui réplique l'API' Favorites' de Bloch. – dimo414