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

回到顶部