为什么声明一个函数参数是最终的?

时间:2011-02-08 06:08:47

标签: 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?

1 个答案:

答案 0 :(得分:89)

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

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