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

scr*_*pse 56 java android final

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

private void processScores(final TableLayout scoreTable, 
      XmlResourceParser scores) throws IOException, XmlPullParserException{
Run Code Online (Sandbox Code Playgroud)

在此函数签名中,作者已将scoreTable参数声明为final.我有点不解为什么他们这样做了.即使尝试为函数参数scoreTable分配一个新值,也不会让我想到这一点(在ActionScript中它被认为是一种不好的做法).此外,我还没有看到任何人在我检查或移植到AS3中的任何真实Java中都这样做.

有没有关于Android开发的具体内容,有时需要将某些函数参数声明为final?

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

tem*_*def 89

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

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

  • 实际上,"匿名内部案例"本身就是一个很好的理由.在Android中,我发现自己经常使用`OnClickListener`和`AsyncTask`类,并且直接在其中重用这些变量的能力就派上用场了.另一个评论链接:http://developer.android.com/guide/practices/design/performance.html#myths. (4认同)