2014-11-23 60 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