没有合适的资源?快使用搜索试试~ 我知道了~
FindBugs错误分析说明.pdf
5星 · 超过95%的资源 需积分: 32 26 下载量 87 浏览量
2013-04-03
11:14:07
上传
评论
收藏 1.72MB PDF 举报
温馨提示
试读
36页
FindBugs错误分析说明包含了常见错误,有针对性的讲解,且有相应实例对照。对java编程者非常有帮助。
资源推荐
资源详情
资源评论
FindBugs 错误修改指南
版本号
修改描述
作者
日期
1.0
新建
cantellow
2011-5-24
1.1
补充英文标识及出错案例
卫缺
2011-6-9
使用方法:复制你的 Pattern id,然后用快捷键 Ctrl + F 查找,即可快速定位。
所有的解释和解决方式只是可能和建议,大多数时候需要根据实际情况而定。
Findbugs 也有少量的误报,需要大家自己甄别。
1. EC_UNRELATED_TYPES
Bug: Call to equals() comparing different types
Pattern id: EC_UNRELATED_TYPES, type: EC, category: CORRECTNESS
解释:
两个不同类型的对象调用 equals 方法,如果 equals 方法没有被重写,那么调用 object 的==,
永远不会相等;如果 equals 方法被重写,而且含有 instanceof 逻辑,那么还是不会相等。
解决方法:
应该改为 str.toString()
2. IM_BAD_CHECK_FOR_ODD
Bug: Check for oddness that won't work for negative numbers
Pattern id: IM_BAD_CHECK_FOR_ODD, type: IM, category: STYLE
解释:
如果 row 是负奇数,那么 row % 2 == -1,
解决方法:
考虑使用 x & 1 == 1 或者 x % 2 != 0
Class doesn't override equals in superclass
这才是判断偶数的正确方法呀,
FindBugs太神奇了~~
3. NP_ALWAYS_NULL
Pattern: Null pointer dereference
id: NP_ALWAYS_NULL, type: NP, category: CORRECTNESS
A null pointer is dereferenced here. This will lead to a
NullPointerException when the code is executed.
4. RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
Bug: Redundant nullcheck of bean1, which is known to be non-null
Pattern id: RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE, type: RCN,
category: STYLE
This method contains a redundant check of a known non-null value against
the constant null.
这种方法包含了一个称为非空对空值的不断重复检查。
修改为:
5. SS_SHOULD_BE_STATIC
Bug: Unread field: ADDRESS_KEY; should this field be static?
Pattern id: SS_SHOULD_BE_STATIC, type: SS, category: PERFORMANCE
This class contains an instance final field that is initialized to a
compile-time static value. Consider making the field static.
解释:
final 成员变量表示常量,只能被赋值一次,赋值后值不再改变。
这个类包含的一个 final 变量初始化为编译时静态值。考虑变成静态常量
解决方法:
增加 static 关键字
6. EQ_COMPARETO_USE_OBJECT_EQUALS
Bug: RsInterface defines compareTo(Object) and uses Object.equals()
Pattern id: EQ_COMPARETO_USE_OBJECT_EQUALS, type: Eq, category: BAD_PRACTICE
解释:
第一段代码,没有使用 instanceof 判断就直接转型,有抛出 classcastexception 异常的可能。
这个 BUG 主题是,遵守约定(x.compareTo(y)==0) == (x.equals(y)),强烈建议,但不严格要求。
在 return 0 的时候,调用 equals 方法返回 true,因为在 PriorityQueue.remove 方法中,1.5
使用的是 compareTo 方法,而 1.6 使用的是 equals 方法,保证环境升级的时候,受影响最小。
解决方法:
在 return 0 的时候,调用 equals 方法返回 true
7. NM_METHOD_NAMING_CONVENTION
Bug: The method name MsmPlanDAOTest.TestViewMsmPlanList() doesn't start
with a lower case letter
Pattern id: NM_METHOD_NAMING_CONVENTION, type: Nm, category:
BAD_PRACTICE
Methods should be verbs, in mixed case with the first letter lowercase,
with the first letter of each internal word capitalized.
解释:
方法应该是动词,与第一个字母小写混合的情况下,与每个单词的首字母大写的内部。
解决方法:
方法名称小写就通过了。
8. HE_EQUALS_USE_HASHCODE
Bug: PerfmSingleGraphPanel$RSCategory defines equals and uses Object.hashCode()
Pattern id: HE_EQUALS_USE_HASHCODE, type: HE, category: BAD_PRACTICE
解释:
重载了 equals 方法,却没有重载 hashCode 方法,如果使用 object 自己的 hashCode,我们可
以从 JDK 源代码可以看到 object 的 hashCode 方法是 native 的,它的值由虚拟机分配(某种
情况下代表了在虚拟机中的地址或者唯一标识),每个对象都不一样。所以这很可能违反
“Equals 相等,hashcode 一定相等;hashcode 相等,equals 不一定相等。”除非你保证不运
用到 HashMap/HashTable 等运用散列表查找值的数据结构中。否则,发生任何事情都是有可
能的。
关于何时改写 hashcode,请参考:在重写了对象的 equals 方法后,还需要重写 hashCode
方法吗?
关于编写高质量的 equals 方法:
1.先使用==操作符检查是否是同一个对象,==都相等,那么逻辑相等肯定成立;
2.然后使用 instanceof 操作符检查“参数是否为正确的类型”;
3.把参数转换成正确的类型;
4.对于该类中的非基本类型变量,递归调用 equals 方法;
5.变量的比较顺序可能会影响到 equals 方法的性能,应该最先比较最有可能不一致的变
量,或者是开销最低的变量。
当你编写完成 equals 方法之后,应该问自己三个问题:它是否是对称的、传递的、一
致的?
解决方法:
除非你保证不运用到 HashMap/HashTable 等运用散列表查找值的数据结构中,请重写
hashcode 方法。
9. NM_CONFUSING
剩余35页未读,继续阅读
资源评论
- Tao的博客2016-01-11大部分都能对上
- maning0032014-01-14不错,挺详细的
- hoarhoar2013-11-25超有参考价值,里边的解释和例子精彩。
- akuan1412015-03-20里边的解释和例子精彩
shenshenjp
- 粉丝: 48
- 资源: 532
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功