2016-05-12 62 views
2

所以我有這樣的代碼:Java的「空」值永遠不會分配給我的Runnable

for(Runnable loadTask : mMeshLoadMap.values()) 
    { 
     if(loadTask != null) 
     { 
      loadTask.run(); 
      loadTask = null; 
     } 
    } 

是永遠不會執行我的問題loadTask = null聲明,Android Studio中說,分配給loadTask「值‘空’是永遠使用「...

另外,當我在該行設置斷點時,調試器永遠不會到達它。 它可以達到loadTask.run()但不loadTask = null 而且我相信,loadTask.run()不洙長

+0

否我想要一個同步執行,我不想爲我的runnables啓動線程 – user2591935

+1

那麼爲什麼你使用Runnable接口呢? 「Runnable接口應該由其實例旨在由線程執行的任何類來實現。」 – DavidS

+1

我認爲編譯器可能實際上刪除了'loadTask = null;'語句,因爲它根本沒有做任何事情。我不確定JLS是否允許這樣做,但只要程序的可觀察效果不會改變,某些語言就允許編譯器執行任何操作。由於斷點的行不會以任何方式影響可觀察的效果,我不明白爲什麼編譯器不應該放棄它。 – 11684

回答

12

這當然可以被分配塊,但它是沒有意義的。您只需將名爲loadTask的引用歸零(該引用不在該塊的範圍之外)。您無法更新數組中的引用。 The For-Each Loop說(部分)

for-each循環隱藏迭代器,所以你不能調用remove。因此,for-each循環不能用於過濾。同樣,它不適用於需要在遍歷列表或數組時替換元素的循環。