为什么要在方法中使用局部final变量? [已关闭]

问题描述 投票:0回答:2

我不知道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

java number-formatting java-6 blockingqueue
2个回答
3
投票

对于第一个问题:

  1. 那不是全局变量,那是成员变量。我确实建议您研究范围规则,以更好地了解词汇。
  2. 程序员做出这个决定的原因有多种可能。我首先想到的是 Android SDK,当您使用本地范围的变量时,性能会略有提高。也可能是程序员认为在这种情况下使用
    final
    会是更好的选择(更多关于为什么可能会发生的信息在这里。)。

第二个问题:

大多数情况下它会返回

DecimalFormat
,但 getInstance 方法有可能返回
NumberFormat
的不同后代(您可以在此处查看
来源
)。


1
投票
  1. 局部作用域变量不打算修改。
  2. NumberFormat
    是一个抽象类,因此它被视为接口。
© www.soinside.com 2019 - 2024. All rights reserved.