java - 有什么可以警告我不要使用 type.equals(incompatibleType) 吗?

标签 java equals static-analysis

是否有任何工具可以针对以下类型的代码警告我:

if ( someClass.equals( someString ))

例如:

if ( myObject.getClass().equals( myClassName ))

这样的东西在 Java 中是合法的(等于一个对象)但是永远不会计算为真(一个类永远不能等于一个字符串)所以几乎可以肯定是一个错误。

我检查了 Eclipse、FindBugs 和 PMD,但似乎都不支持此功能?

最佳答案

是的,IntelliJ IDEA 有这样的检查,我相信它是默认启用的。它标记以下内容:

Class<?> clazz = String.class;
if (clazz.equals("foo")) {
   //...
}

带有警告:

'equals()' between objects of inconvertible types.

可以通过“设置”->“项目设置”->“检查”启用/禁用检查,然后在“可能的错误”下选中/取消选中“不可转换类型的对象之间的‘equals()’。”

FindBugs 也应该用 "EC: Call to equals() comparing different types" 捕获这个错误检查。正如您所知,它可以与 Eclipse 集成。

虽然两者都不是 Elixir ;他们无法读懂你的想法。您最多只能希望它会产生误报而不是漏报。

关于java - 有什么可以警告我不要使用 type.equals(incompatibleType) 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898279/

相关文章:

python - 带有@deprecated 装饰器的函数的 lint 用法

java - 如何静态识别 JAR 中缺少的方法(二进制兼容性)

java - 如何在 Spring Boot 中设置经过身份验证的 JavaMailSender

java - 在 this.object 为 null 的 Java 中重写 equals 和 hashcode

java - 无法在提供的参数值中找到 'in_id' 对应的参数值

python - 我可以更改 Python 字典中键的比较方式吗?我想使用运算符 'is' 而不是 ==

java - 比较字符串时使用 equals 或 contentEquals

gcc - 如何知道哪些代码已经优化出来了?

java - 编译 protobuf 以使用原始类而不是众所周知的类型

java - 亚洲语言中带年份的日期格式