2013-03-07 39 views
0

我創建了Android應用程序並在其上運行靜態分析工具PMD。而我沒有得到的是爲什麼它給了我警告,並說如果可能的話在這個例子中聲明最終字段。爲什麼PMD建議使田地最終?

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

它只是啓動內部的AsyncTask實例。宣佈它最終是否是好的風格,爲什麼?爲了便於閱讀,我創建了一個新對象,但PMD說它應該是最終的。

+0

是否有理由將RequestSender的實例存儲在屬性中?爲什麼不只是'新的RequestSender(aaa).execute(xxx,yyy);' – Phix 2013-03-07 08:16:09

+0

是的,你是對的。謝謝!但這只是一個例子,所以我會更新我的問題。 – Bobans 2013-03-07 08:18:50

+0

我給了一個-1,因爲* static *和* final *是不同的。選擇正確的單詞並在標題中使用它。但*更好*,首先搜索,如:'[java]爲什麼使變量final'。 – 2013-03-07 08:20:04

回答

1

這裏有兩個不同的東西(你在說靜態和最終)。

關於final,如果你創建一個參考,你將不會改變(自己可以修改的對象),這是一個很好的做法,聲明它最後,有兩個原因:

  • 它可以幫助編譯器以便能夠進行小的性能優化
  • 它可以幫助您(或您的開發人員)瞭解此參考不會更改 - 它會發出信號。

關於static(一個變量,關鍵字有不同的結構,不同的含義),它會使你的cityItems以其特有的包圍類的所有對象。如果所有對象都可以使用相同的值,那麼複製它就沒有收益。再次,不僅要考慮編譯器/性能方面,還要考慮信號:如果我看到一個帶有「靜態」的字段,我知道它在所有對象之間共享 - 我不需要額外的信息或文檔。

在您的示例中,該字段可能應該是公共靜態(如果是共享的)或私有的(公共或「package protected」字段正在打破封裝)。

相關問題