java - 为什么将函数参数声明为 final?

标签 java android final

我目前正在阅读 Sams 出版的《24 小时内自学 Android 应用程序开发》一书。我对 Java、Android 或其他方面比较陌生。我在 ActionScript 3 方面有非常扎实的背景,它与 Java 有足够的相似之处,语言本身并不难掌握,但我仍然对书中一些代码示例背后的基本原理有一些疑问。例如,下面是第 9 小时示例代码附带的一个函数:

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{

在此函数签名中,作者已将 scoreTable 参数声明为 final。我有点疑惑他们为什么要这么做。我什至不会尝试为函数参数 scoreTable 分配一个新值(这在 ActionScript 中被认为是一种不好的做法)。此外,我实际上还没有看到有人在我检查过或移植到 AS3 的任何真实 Java 中这样做。

Android 开发中是否有一些特定的东西使得有时必须将某些函数参数声明为 final?

为什么 TableLayout 对象声明为 final,而不是 XmlResourceParser?

最佳答案

您可能希望将参数标记为 final 的主要原因有两个。首先,如果您打算在匿名内部类中使用该参数,则必须将其标记为 final 以便可以在该类中引用它。这实际上是一个非常常见的将参数标记为 final 的用例。

标记参数 final 的另一个常见原因是防止自己意外覆盖它们。如果您真的不想更改参数,那么也许您应该将它们标记为 final,这样如果您真的这样做,您将在编译时收到错误而不是在运行时发现你的代码有错误。

关于java - 为什么将函数参数声明为 final?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4930114/

相关文章:

java - Outputstream是一个抽象类,所以我们不能实例化它。为什么要为Outputstream类提供一个默认的构造函数呢?

java - case 表达式必须是 static final int 的常量表达式?

java - Android 上的 Firebase 自动重新连接

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到本地final变量中?

java - 在 Java 中创建常量对象

java - 重建 Android Studio 项目时出现错误

java - 覆盖另一个类中的方法

java - Liferay - 捕捉 Action 阶段以设置 'waiting' 光标

java - 安卓 : convert binary string to byte

android - 将 YouTube 视频转换到 Chromecast