Jon*_*uis 17 java generics 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>
,其中pair接受相同类型的Key/Value.但是,按键查看这个不再是一个恒定的时间操作.
我知道我可以做类似的事情,Map<Key<?>, Value<?>>
并断言Key和Value在运行时是相同的类型.但是,我想知道这是否可以严格使用泛型.
Lou*_*man 22
你可以这样做,但你必须在自己的上面滚动自己的包装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
}
}
Run Code Online (Sandbox Code Playgroud)
比较例如番石榴ClassToInstanceMap
.