我最近遇到了一个错误,我有一个键类型为 Long
的 Map,但我试图将它与类型为 String
的键一起使用。我基本上有类似的东西:
Map<Long, Object> map;
...
String wrongType;
if (map.containsKey(wrongType)) {
// Do something
} else {
// Do something different
}
因为映射中的所有键都是 Long 类型,代码总是执行 else
block 。
由于 containsKey
和 get
方法采用 Object
类型的参数,因此可以毫无怨言地接受任何旧类型的对象。
我的困惑源于同一实体在我们的系统中以两种不同的方式表示(有时作为 Long
,有时作为 String
);我不能轻易改变这一点。有什么办法可以在开发过程中而不是在测试过程中发现这样的错误?也许是一个编译器标志或一些 Eclipse 选项,它对我应该使用 containsKey
和 get
方法(以及它们在 中的类似物)使用哪种对象更智能也设置
...)
最佳答案
FindBugs 对此进行了测试:GC_UNRELATED_TYPES
在您的代码上运行 FindBugs 应该可以揭示这一点,以及许多其他的东西;-)
关于Java:尝试使用错误类型作为映射键时出现编译器或 Eclipse 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767291/