我不知道Sun为什么要写这样的代码,这里有例子(JDK版本:1.6):
示例1:
java.util.concurrent.PriorityBlockingQueue#offer(E e):
public boolean offer(E e) {
final ReentrantLock lock = this.lock;
lock.lock();
try {
boolean ok = q.offer(e);
assert ok;
notEmpty.signal();
return true;
} finally {
lock.unlock();
}
}
为什么要在方法块中定义局部变量
final
ReentrantLock
,为什么不直接使用全局变量lock
?
示例2:
这个方法
java.text.NumberFormat#getInstance(Locale desiredLocale, int choice):
创建了一个DecimalFormat
对象,但返回类型是NumberFormat
。为什么不将返回类型设置为 DecimalFormat
?
对于第一个问题:
final
会是更好的选择(更多关于为什么可能会发生的信息在这里。)。第二个问题:
大多数情况下它会返回
DecimalFormat
,但 getInstance
方法有可能返回 NumberFormat
的不同后代(您可以在此处查看来源)。
NumberFormat
是一个抽象类,因此它被视为接口。