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