<h2>一.返回零长度的数组或者集合,而不是null</h2>
下面这段代码判断如果一个成员变量集合大小为0,则返回了一个空对象
private final List<Cheese> cheeseInStock = ...;
public Cheese[] getCheeses() {
if (cheesesInStock.size() == 0) {
return null;
}
}
<p>然而这种写法并不合适,返回类型为数组或集合的方法没有什么理由返回null。因为当你的方法返回为null时,调用者不仅要判断你返回的结构长度是否为空,同时还要判断你返回的对象可能本身就是空,一旦不注意很有可能造成NullPointerException,就如下面代码所示。正确的做法应该返回一个零长度的数组或者集合。</p>
private WordClusterVO convert(WordClusterExtension word) {
if (word.getSimilaryWord() == null || word.getSimilaryWord().size() == 0) {
// 没有相似词的词簇是异常情况
return null;
}
<p>这种写法很大程度都是从C带来的,因为C语言中习惯于返回null,进行指针的判断,要习惯于Java就必须改掉这些习惯。返回的对象应当这样写:</p>
public Cheese[] getCheeses() {
if (cheesesInStock.isEmpty()) {
return Collections.emptyList(); //Always returns same list
} else {
return new ArrayList<Cheese>(cheesesInStock);
}
}
<h2>二.坚持使用Override注解</h2>
对于想覆盖的方法一定要使用@Override注解,否则可能得到的结果是方法的重载而不是覆盖。