我有這樣的代碼:for循環中的最後一個計數器?
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i);
}
});
}
這顯然不能編譯,因爲i
將需要最終在匿名類中使用。但是我不能做出最後的決定,因爲事實並非如此。你會怎麼做?一個解決辦法是複製,但我認爲有可能是一個更好的辦法:
List<Runnable> r = new ArrayList<>();
for(int i = 0; i < 10; i++) {
final int i_final = i;
r.add(new Runnable() {
@Override
public void run() {
System.out.println(i_final);
}
});
}
編輯只是要清楚,我這裏使用的一個Runnable的例子來說,真正的問題是有關匿名類,這可能是其他任何東西。
我不認爲有更好的辦法... – thumbmunkeys 2012-03-13 11:20:32
由於顯而易見的原因,循環計數器永遠無法進入最終狀態,所以我認爲您將值複製到最終變量中的方法是唯一的方法(但我對可能丟失的備選方案感興趣)。 – ftr 2012-03-13 11:21:59