Java泛型对映射的键和值强制使用相同的类型
我在寻找什么: 我想构造一种对映射的键和值都强制类型的东西:有点像Java泛型对映射的键和值强制使用相同的类型,java,generics,map,Java,Generics,Map,我在寻找什么: 我想构造一种对映射的键和值都强制类型的东西:有点像map。但是,我还想强制每个键/值条目内的类型匹配,但在条目之间,不应强制任何类型 例如,在同一映射中,这些键/值对应被视为有效: 键映射到值 键映射到值 键映射到值 但是,类似的内容是无效的: 键映射到值 键映射到值 如何使用Java泛型实现这一点 我不想找的东西: 我知道我可以实现类似Set,其中 pair接受相同类型的键/值。然而,通过 键将不再是恒定时间操作 我知道我可以做一些像Map> 只需在运行时断言键和值
map
。但是,我还想强制每个键/值条目内的类型匹配,但在条目之间,不应强制任何类型
例如,在同一映射中,这些键/值对应被视为有效:
映射到键
值
映射到键
值
映射到键
值
映射到键
值
映射到键
值
我不想找的东西:
- 我知道我可以实现类似
,其中 pair接受相同类型的键/值。然而,通过 键将不再是恒定时间操作Set
- 我知道我可以做一些像
只需在运行时断言键和值是相同的类型。 但是,我想知道严格使用泛型是否可能做到这一点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
}
}
类MyTypeSafeMap{
私有地图>地图;
公共作废put(键、值){
map.put(键、值);
}
公共值获取(密钥){
返回(值)映射。获取(键);
//我们知道它是安全的,但编译器无法证明它
}
}
比较例如番石榴。使用通用地图定制类
另一个泛型类GenericKey对于键,您可以在这个答案中看到完整的示例
您不是在泛型类中拥有该映射吗?不一定。只是想在任何地方创建一个映射
,该映射只强制“键必须与值的类型相同(或者在键
/值
的情况下,键内具有相同的泛型类型),但每个键/值对可以是不同的类型。”这正是您搜索的内容:将返回值转换为(value)或(value)有什么区别吗?