2017-02-17 172 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」 –