作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
检查以下代码:
@Override
public int compareTo(final Intersection o) {
if (o == null)
return 0;
double distance = t;
double distance2 = o.t;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
一切似乎都很好,但是 0 可能会在两个不同的条件下返回这一事实让我有些困扰。但是,如果我将 distance
和 distance2
的变量赋值移动到顶部,我的 IDE 会警告我
if (o == null)
return 0;
然后将是“死”代码。如果是这样的话,在这种情况下甚至应该检查 null 吗?
我的意思是:
@Override
public int compareTo(final Intersection o) {
double distance = t;
double distance2 = o.t;
if (o == null)
return 0;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
最佳答案
final可以为null,只是表示它不能被赋值,在匿名内部类等中可见。
在你的情况下,问题是不同的:(见评论)
public int compareTo(final Intersection o) {
double distance = t;
double distance2 = o.t; // here you use it, potentially causing NPE
if (o == null) // if o was null, this is never reached
return 0;
if (distance == distance2)
return 0;
return distance2 > distance ? -1 : 1;
}
关于java - 如果传递的是 final 对象,是否仍应检查 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27489065/
我是一名优秀的程序员,十分优秀!