2017-02-17 171 views
-4

避免循环内实例化的最佳解决方案是什么? 由CAST我们检查我们的代码,现在我们不会解决问题。代码避免java中循环内的实例化

部分是遵循

List<Long> darkList = new ArrayList<>(); 
for (Threshold thresholdObj : threshold) { 
    DarkDTO dto = new DarkDTO(); 
    dto.setID(1L); 
    darkList.add(dto); 
} 

的问题是DarkDTO dto = new DarkDTO();线
如何避免避免循环中的实例?

+5

你不能在这里......你想解决的实际问题是什么?否则,请阅读[XY问题](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+0

循环内的实例化有时表示逻辑错误,但我认为它不适用到你的代码。没有什么可以改善你的代码。你也可以阅读这个[问题](http://softwareengineering.stackexchange.com/questions/167938/does-it-make-a-difference-if-i-declare-variables-inside-or-outside-a-loop -in-jav)作为参考 –

+0

我不知道CAST是什么,但警告你“避免在循环内实例化”是无稽之谈。此代码也不能编译 - 你的'DarkDTO'不能扩展'Long',所以你不能将它添加到'List '。 – dimo414

回答

-3

避免内部loop.Try

 DarkDTO dto = new DarkDTO(); 
     List<Long> darkList = new ArrayList<>(); 
     for (Threshold thresholdObj : threshold) { 
     dto.setID(1L); 
     darkList.add(dto); 
     } 

初始化但从垃圾收集器的两个点的方法(在这个问题,我的代码的代码)的工作方式相同,即没有记忆是leaked.But我的方法时DarkDTO dto = new DarkDTO();之前引用的DarkDTO()成为孤儿,并有资格进行垃圾回收。

不同之处在于,一旦循环用完,您可以通过最初在循环外创建的DarkDTO引用仍然可以访问最后一个DarkDTO实例。因此我给出了该代码。

而且原来的问题是

如何避免避免循环中的实例? 因此,这是一个非常简单的答案

+3

相同的对象引用将在列表中存在N次。换句话说,编辑一个,他们都改变。 –

+2

是什么让你觉得这是一个好主意,或者解决了OP的问题? – dimo414

+0

我不确定谁投了票,但耻辱... –

1

,如果你想为每个Threshold对象DarkDTO对象无法避免。如果你避免实例化它,你最终会得到一个不明显的dto对象。当然,你正在寻找错误的地方来解决你的实际问题。

看起来您正在使用的工具/产品可能会报告此问题。如果我是你,我只是跳过/停止使用该软件,因为我们知道你确实是dto对象。

-3

您可以在Java8中使用forEach操作。 但它绝对是一样的效果,我不知道为什么你想避免循环中的对象实例化。

final List<Long> darkList = new ArrayList<>(); 
threshold.forEach(threshold->{ 
    DarkDTO dto = new DarkDTO(); 
    dto.setID(1L); 
    darkList.add(dto); 
}); 
+1

这不是每次创建新实例吗? –

+1

做同样的事情不是一个答案:) –

+1

是的,当然是的。但它不在循环中,CAST不会检查它:D “我怎样才能避免避免循环内的实例化?” =>交换循环。 由于在循环中编码检查实例是没有意义的,所以我提供了一种方法来欺骗“CAST” –