我正在阅读Java源代码,遇到两个小问题。我不知道为什么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();
}
}
为什么要在方法块中定义本地最终ReentrantLock
变量,为什么不直接使用全局变量lock
?
问题2:
此方法java.text.NumberFormat#getInstance(Locale desiredLocale, int choice):
创建一个DecimalFormat
对象,但返回类型为NumberFormat
。为什么不将返回类型设为DecimalFormat
?
答案 0 :(得分:3)
对第一个问题:
final
会是更好的选择(更多关于为什么可能会发生here。)。第二个问题:
大部分时间都会返回DecimalFormat
,但getInstance
方法有可能(并且您可以看到the source here)返回NumberFormat
的不同后代
答案 1 :(得分:1)
NumberFormat
是一个抽象类,所以它被视为接口。