从类到的事类型安全映射
-
25-09-2019 - |
题
我想使一个地图种类的容器,它具有以下接口:
public <T> Thing<T> get(Class<T> clazz);
public <T> void put(Class<T> clazz, Thing<T> thing);
有趣的是,在每个T
的Class<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,但是当你把它找回来,你是唯一的保证是,它是一个东西,你不能告诉如果它是一个孩子或孙子女没有实际测试它。
不隶属于 StackOverflow