Java泛型对map的键和值强制使用相同的类型
我正在寻找一种可以在地图的键和值上强制类型的东西:有点像Map<Key<X>, Value<X>>
。但是,我还想 在
每个键/值条目中强制类型匹配,但是 在 条目 之间 ,不必强制任何类型。
例如,在同一张地图中,这些键/值对应视为有效:
Key<Integer>
映射到Value<Integer>
Key<String>
映射到Value<String>
Key<Double>
映射到Value<Double>
但是,这样的事情将是无效的:
Key<Integer>
映射到Value<String>
Key<Double>
映射到Value<Boolean>
如何使用Java泛型完成此任务?
我知道我可以实现类似的东西
Set<Pair>
,其中对接受相同类型的键/值。但是,按键查找将不再是固定时间的操作。我知道我可以做类似的事情
Map<Key<?>, Value<?>>
,只是断言在运行时Key和Value是相同的类型。但是,我想知道是否可以严格使用泛型。
回答:
您可以执行此操作,但必须在上滚动自己的包装器Map
:
class MyTypeSafeMap { private Map<Key<?>, Value<?>> map;
public <T> void put(Key<T> key, Value<T> value) {
map.put(key, value);
}
public <T> Value<T> get(Key<T> key) {
return (Value) map.get(key);
// we know it's safe, but the compiler can't prove it
}
}
比较例如番石榴的ClassToInstanceMap
。
以上是 Java泛型对map的键和值强制使用相同的类型 的全部内容, 来源链接: utcz.com/qa/397604.html