为什么要将函数参数声明为 final?

2022-08-31 17:16:52

我目前正在阅读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开发是否有一些具体的东西使得有时有必要将某些函数参数声明为最终参数?

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


答案 1

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

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


答案 2

推荐