Javagenerics对map的键和值强制执行相同的类型
我在找什么:
我正在构建一些在地图的键和值上强制执行类型的东西:有点像Map<Key, Value>
。 但是,我还想在每个键/值条目中强制执行类型匹配,但在条目之间 ,不应强制执行任何类型。
例如,在同一个映射中,这些键/值对应被视为有效:
-
Key
映射到Value
-
Key
映射到Value
-
Key
映射到Value
但是,这样的事情将是无效的:
-
Key
映射到Value
-
Key
映射到Value
如何使用Javagenerics完成此操作?
我不想要的:
-
我知道我可以实现类似
Set
东西,其中pair接受相同类型的Key / Value。 但是,按键查看这个不再是一个恒定的时间操作。 -
我知道我可以执行类似
Map<Key, Value>
并断言Key和Value在运行时是相同的类型。 但是,我想知道这是否可以严格使用generics。
你可以这样做,但你必须在Map
上滚动你自己的包装:
class MyTypeSafeMap { private Map, Value>> map; public void put(Key key, Value value) { map.put(key, value); } public Value get(Key key) { return (Value) map.get(key); // we know it's safe, but the compiler can't prove it } }
比较例如Guava的ClassToInstanceMap
。