0

我创建了 Android 应用程序并在其上运行静态分析工具 PMD。我不明白为什么它给我警告并说在可能的情况下声明字段最终,就像在这个例子中一样。

final City selectedItem = (City) arg0.getItemAtPosition(arg2);
new RequestSender(aaa).execute(xxx, selectedItem.getId());

它只是启动内部 AsyncTask 实例。将其宣布为最终风格是一种好风格吗?为什么?为了可读性,我创建了一个新对象,但 PMD 说它应该是最终的。

4

1 回答 1

1

这里有两件不同的事情(你在谈论静态和最终)。

关于final,如果您创建一个不会更改的引用(对象本身可以修改),最好将其声明为 final ,原因有两个:

  • 它有助于编译器能够进行小的性能优化
  • 它可以帮助您(或您的开发人员)了解此引用不会被更改 - 它给出了一个信号。

关于静态(对于变量,关键字对于不同类型的结构具有不同的含义),它将使您的 cityItems 对于其封闭类的所有对象都是唯一的。如果所有对象都可以使用相同的值,则复制它没有任何好处。同样,不仅要考虑编译器/性能方面,还要考虑信号:如果我看到一个带有“静态”的字段,我知道它是在所有对象之间共享的——我不需要额外的信息或文档。

在您的示例中,该字段可能应该是公共静态(如果它是共享的)或私有(公共或“包保护”字段正在破坏封装)。

于 2013-03-07T08:24:28.170 回答