为了缩短我的代码,我开始使用我的java项目中所需的组件构建列表,以通过简单的for循环访问它们。
当一切正常时,我想将ItemListeners添加到列表中的组件:
checkBoxes.get(0).addItemListener(){/*including code here*/}
工作完全没问题,但我想用循环设置它们。所以我尝试了这个:
for (int i=0; i<=10; i++){
checkBoxes.get(i).addItemListener(new ItemListener){
public void itemStateChanged(ItemEvent arg0){
someMethod(i);
}
});
}
因为checkBoxes应该根据它们的索引触发另一个方法。我收到编译器错误:
我在封闭范围内定义的局部变量必须是最终的或有效的最终
所以我假设我不能以这种动态的方式添加ItemListeners?有办法解决这个问题吗?
经过一秒钟的测试后,似乎我根本无法使用i
?
答案 0 :(得分:1)
正如编译器所说,i
必须是最终的。
要实现这一点,您可以在循环中使用中间最终变量。
for(int i=0; i<checkBoxes.size(); i++) {
final int finalI = i;
checkBoxes.get(i).addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent arg0){
someMethod(finalI);
}
});
}