addItemListener with for-loop 不可能

addItemListener with for-loop not possible

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

因为复选框应该根据其索引触发另一种方法。我收到编译器错误:

Local variable i defined in an enclosing scope must be final or effectively final

所以我假设我不能以这种动态方式添加 ItemListeners?有解决办法吗?

经过一秒钟的测试,我似乎根本无法使用 i

正如编译器所说,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);
        }
    });
}