Estoy tratando de crear un tipo genérico que guarde un mapa de las versiones de sí mismo que se han creado para su uso posterior. Efectivamente, es un patrón único donde hay una instancia por tipo. El código que tengo hasta ahora es:Mapa genérico de llaves/valores genéricos con tipos relacionados
public class FieldBinder<T> {
static final Map<Class<? extends Object>,FieldBinder<? extends Object>> instanceMap =
new HashMap<Class<? extends Object>,FieldBinder<? extends Object>>();
private FieldBinder() {}
synchronized public static <V extends Object> FieldBinder<V> getInstance(Class<V> klass) {
if(!instanceMap.containsKey(klass)) {
instanceMap.put(klass, new FieldBinder<V>());
}
return (FieldBinder<V>)instanceMap.get(klass);
}
}
Sin embargo, todavía no estoy seguro de que estoy "haciendo las cosas bien". Siento que debería ser capaz de especificar que la colección es (Clase -> FieldBinder). El hecho de que el IDE advierte sobre la declaración de devolución solo refuerza este pensamiento.
¿Hay una mejor manera de manejar esto?
Nota: This question parece muy relacionado, pero lo suficientemente lejos que no puedo encontrar la manera de aplicar la información a mi propio problema.
Suponiendo que entiendo lo que dices, eso no es para nada lo que estoy haciendo. Lo que quiero es decirle al compilador "este es un mapa de 'Clase >' a 'FieldBinder >' donde ambos 'deben ser iguales. Por lo tanto, cuando saco algo usando una clave de? = Xyz, puedo hacerlo con seguridad Convery el valor para? = xyz, ya que el compilador puede limitarme a solo poner las cosas de esa manera. Es toda la información del tiempo de compilación, parece que el compilador no puede manejarlo. – RHSeeger