是否有IDE或IDE插件会提醒开发人员注意可能的NPE?例如:
Object[] x = getMyObjects();
if (x.length > 0){
// do my stuff
}
如果IDE警告不检查x是否存在可能的空值,那将是很好的。这将节省许多工程时间..
答案 0 :(得分:6)
这是FindBugs可以在许多其他有用的东西中检测到的东西。还有Eclipse plugin可用。
答案 1 :(得分:3)
NullPointerExceptions本质上是编程错误。
如果给定的数组为空,你能做什么? A.跳过支票。更好的选择是返回一个空数组:
public Object [] getMyObjects() {
/// do a lot of stuff
if( nothingToReturn() ){
return new Object[0];
} else {
return nonNullArray;
}
}
所以
if( x.length > 0 )
永远不要把Npe扔到第一位。
虽然很好,很快你就会意识到你的代码将无法读取。
这就是为什么“encapsulation”在OOP中是一个如此重要的概念(这样其他对象就不会使你的数据无效)。
我认为检查外部类是否返回null是合理的(顺便说一句,这应该被很好地记录)但是对于内部方法,真正的问题是,自己的对象不知道它自己的实例变量的状态
注意这对于评论而言太大了,这就是我提供CW答案的原因。
答案 2 :(得分:3)
您可能希望首先添加FindBugs插件,以便在每次保存时检查此类(以及更多)错误。如果您还没有,请添加CheckStyle插件: - )
答案 3 :(得分:1)
除了约翰的回答......
Eclipse 3.4给了我一个很好的信息,就像:
此时变量只能为空。
一开始我简直不敢相信,但确实如此。 这是两个表达式:
if ((var == null) && (var.getProperty().equals("")) {
if ((var != null) || (var..getProperty().equals("")) {
答案 4 :(得分:1)
Eclipse 3.5(以及AFAIR 3.4)也有两个Nullpointers的编译器选项。
您可以在Window
- >找到它们。 Preferences
- > Java
- > Compiler
- > Error/Warnings
- > Potential programming problems
。
我的首选设置是Error
的Null pointer access
(这些是明确提出例外情况)和Warning
的{{1}}。