Java:尝试使用错误类型作为映射键时出现编译器或 Eclipse 警告

标签 java eclipse generics

我最近遇到了一个错误,我有一个键类型为 Long 的 Map,但我试图将它与类型为 String 的键一起使用。我基本上有类似的东西:

Map<Long, Object> map;
...
String wrongType;
if (map.containsKey(wrongType)) {
    // Do something
} else {
    // Do something different
}

因为映射中的所有键都是 Long 类型,代码总是执行 else block 。

由于 containsKeyget 方法采用 Object 类型的参数,因此可以毫无怨言地接受任何旧类型的对象。

我的困惑源于同一实体在我们的系统中以两种不同的方式表示(有时作为 Long,有时作为 String);我不能轻易改变这一点。有什么办法可以在开发过程中而不是在测试过程中发现这样的错误?也许是一个编译器标志或一些 Eclipse 选项,它对我应该使用 containsKeyget 方法(以及它们在 中的类似物)使用哪种对象更智能也设置...)

最佳答案

FindBugs 对此进行了测试:GC_UNRELATED_TYPES

在您的代码上运行 FindBugs 应该可以揭示这一点,以及许多其他的东西;-)

关于Java:尝试使用错误类型作为映射键时出现编译器或 Eclipse 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18767291/

相关文章:

android - DDMS 不显示来自设备的线程

Eclipse/Aptana 文件同步解决方案

java - Java中未绑定(bind)通配符泛型的用途和意义是什么?

java - 使用多个数组列表或带有 stringtokenizer 的数组在 java 中编写解释器

java - 使用 lambda 启动线程并调用 join

java - 注入(inject)和配置 Gradle 构建

java - 如何在Spring应用程序中访问图像文件夹

eclipse - 是否可以扩展 Eclipse 搜索菜单

java - 泛型并在 Java 中转换

java - ExecutorService 未经检查的分配