2014-11-23 61 views
1

我收到PMD的警告。它說我不應該在循環中實例化對象。這裏是我的代碼:實例化循環中的對象有什麼問題?

Collection<File> files = new LinkedList<>(); 
for (String name : names) { 
    files.add(new File(name)); 
} 

這是怎麼回事?

+0

沒有什麼是真的錯了,: 看到這個: http://stackoverflow.com/questions/17340421/pmd-avoid-instantiating-new-objects-inside-loops – Ajdin 2014-11-23 21:32:26

回答

2

您的第一步是針對某些特定的庫:the documentation

應該檢查循環內創建的新對象,看它們是否可以在外部創建並重用。

這是真實的一般情況,但同樣經常(如果不是更多)也適合在循環內創建它們。在你的情況下,顯然在循環中創建一個新實例是必要的(這就是循環的目的),所以你可以忽略這個警告。

0

創建一個方法,該方法將返回一個新對象並在循環中調用該方法以獲取新對象,如果您確實想避免此PMD警告。

對於你的代碼,它會是這樣的。

public static File createFile(String name) { 
    File f = new File(name); 
    return f; 
    } 

Collection<File> files = new LinkedList<>(); 
    for (String name : names) { 
     files.add(createFile(name)); 
    } 

但是,我們無法通過此更改提高性能。
因此,避免這種PMD並不是什麼大不了的事情。
請不要浪費你的時間來解決這些問題。

+0

有趣的是,當您的公司強制您通過驗證,結果是自動生成的JavaDoc非常低效的代碼... – lordscales91 2017-10-31 14:02:52