Contenedor heterogéneo para almacenar objetos generics a máquina en Java

Intento seguir el patrón de contenedor heterogéneo tipo seguro de Joshua Bloch desde Effective Java para crear un contenedor de objetos ( MyGeneric ) con Class como clave.

  public class MyClass { private Map<Class, MyGeneric> myContainer = new HashMap<Class, MyGeneric>(); public  void addToContainer(Class class, MyGeneric thing) { myContainer.put(class, thing); } public  MyGeneric getFromContainer(Class class) { return (MyGeneric)(myContainer.get(klass)); } } 

El problema está en getFromContainer Tengo que realizar un elenco sin marcar. En el contenedor de Josh Bloch, él realiza un lanzamiento seguro, pero en mi caso no veo una manera de cómo es posible.

¿Alguien tiene alguna idea?

Saludos, Nick.

En la versión de Bloch, se utiliza Class.cast() , que se implementa como return (T) obj , un molde sin verificar. Es una trampa en el sentido de que la advertencia del comstackdor sobre el elenco sin marcar se mueve a una lib comstackda previamente. El tipo de seguridad del elenco no está protegido por el comstackdor, sino por la lógica de la aplicación.

No debes preocuparte por el lanzamiento sin marcar tampoco. Hay relaciones tipo que no se pueden express en el idioma, pero que los progtwigdores saben que son ciertas. Así que solo anule el comstackdor, dígale que el lanzamiento es seguro.

Corrección

Mi comprensión acerca de “elenco sin marcar” fue incorrecta.

Class.cast() no contiene “elenco sin Class.cast() “. El lanzamiento se realiza después de “verificar”, si se alcanza el lanzamiento en el tiempo de ejecución, se garantiza que tendrá éxito.

 T cast(Object obj) if obj is instance of this class // check return (T)obj; // cast else throw new ClassCastException