tôi có mã này:Một bộ đếm cuối cùng trong vòng lặp 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);
}
});
}
Nó rõ ràng là không biên dịch vì i
sẽ cần phải được chính thức được sử dụng trong lớp nặc danh. Nhưng tôi không thể làm cho nó cuối cùng bởi vì nó không phải là. Bạn sẽ làm gì? Một giải pháp là để lặp lại nó nhưng tôi nghĩ rằng có thể có một cách tốt hơn:
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);
}
});
}
EDIT chỉ để làm cho nó rõ ràng, tôi đã sử dụng một Runnable đây vì lợi ích của ví dụ, câu hỏi thực sự là khoảng ẩn danh các lớp học, có thể là bất cứ điều gì khác.
Tôi không nghĩ có cách nào tốt hơn ... – thumbmunkeys
Vì truy cập vòng lặp vì lý do rõ ràng không bao giờ có thể được thực hiện cuối cùng, tôi nghĩ cách tiếp cận sao chép giá trị vào biến cuối cùng là cách duy nhất để đi (nhưng tôi quan tâm đến các lựa chọn thay thế có thể bị thiếu). – ftr