我想使一个地图种类的容器,它具有以下接口:

public <T> Thing<T> get(Class<T> clazz);
public <T> void put(Class<T> clazz, Thing<T> thing);

有趣的是,在每个TClass<T>s - > Thing<T>一对是一样的T,但容器应该能够容纳许多不同类型的对。起初,我尝试了(哈希)导航 。但是,例如,

Map<Class<T>, Thing<T>>

是不正确的,因为那时T将是所有在地图对同一T。当然,

Map<Class<?>, Thing<?>>

的作品,但我没有类型安全的保证,这样,当我get(String.class),我不能肯定,我得到一个Thing<String>实例回来。

有没有办法实现,我正在寻找的那种类型安全的一种明显的方式?

有帮助吗?

解决方案

在地图本身就不能保证,但如果你只通过上面的方法访问它,你将有所需的安全性。

其他提示

如果您希望能够将不同类型的你不应该声明了两个类型参数?

public <K, V> Thing<V> get(Class<K> clazz);
public <K, V> void put(Class<K> clazz, Thing<V> thing);

或我误解的问题?

编辑:我明白了,那么如果你想Ø容器,可以容纳不同类型的实体,有没有办法可以有完整的类型安全,因为当你宣布你的容器,你只能把容器上的一个类型,然后你或许可以把对象,但你不能确定你会得到什么。充其量你最终投入对象作为对象,然后做的instanceof和管型,当你让他们回来。所有藏品都有这个问题。想象一下,你有一个Collection<T extends Thing>。你可以把它的东西,ChildOfThings,或GrandChildOfThings,但是当你把它找回来,你是唯一的保证是,它是一个东西,你不能告诉如果它是一个孩子或孙子女没有实际测试它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top