不能使用for循环的addItemListener

时间:2016-09-26 08:49:00

标签: java itemlistener

为了缩短我的代码,我开始使用我的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

1 个答案:

答案 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);
        }
    });
}