我最近被一个错误所困扰,其中我有一个带有 key type 的 Map Long
,但我试图将它与 key type 一起使用String
。我基本上有类似的东西:
Map<Long, Object> map;
...
String wrongType;
if (map.containsKey(wrongType)) {
// Do something
} else {
// Do something different
}
因为映射中的所有键都是 Long 类型,所以代码总是执行该else
块。
由于containsKey
andget
方法采用 type 参数Object
,任何旧类型的对象都可以毫无怨言地接受。
我的困惑源于这样一个事实,即同一个实体在我们的系统中以两种不同的方式表示(有时是 a Long
,有时是 a String
);我不能轻易改变这一点。有什么方法可以在开发而不是测试期间发现这样的错误?也许是一个编译器标志或一些 Eclipse 选项,它们对于我应该使用什么类型的对象containsKey
和get
方法(以及它们在 中的类似物Set
......)