我不理解final
变量的概念。在for
循环中,我有动态变量i
,这对我来说引用数组至关重要。我一使用i
,就会发出错误消息,说它应该是final
。
究竟是什么final
?你能帮忙摆脱那个错误吗?
我的代码在这里:
for( int i = 0; i <4; i++)
{
Bitmap celeb1=Bitmap.getBitmapResource(fimagearray[i]);
Bitmap celeb1_focus=Bitmap.getBitmapResource(fimagearray[i]);
ImageButton celebbutton = new ImageButton(celeb1, celeb1_focus);
celebbutton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context)
{
UiApplication.getUiApplication().pushScreen(new FetchTweets(fusernamearray[i]));
}
});
femaleSec.add(celebbutton);
}
答案 0 :(得分:10)
匿名内部类只能从外部作用域访问final
个变量。由于i
不是最终版,因此无法直接访问。由于需要更改,因此无法使i
成为最终版本,并且无法更改最终变量。
作为一种简单的解决方法,在每次循环迭代期间将i
的值复制到最终变量中:
for( int i = 0; i < 4; i++)
{
final int index = i; // <-- copy i to `index' to use in FieldChangeListener
// ...
celebbutton.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context)
{
UiApplication.getUiApplication().pushScreen(
new FetchTweets(fusernamearray[index])); // <-- `index'
}
});
femaleSec.add(celebbutton);
}
答案 1 :(得分:2)
答案 2 :(得分:2)
您正在尝试在“匿名内部类”中使用i
的值,该值要求将该类的所有非局部变量声明为final
,这意味着该变量的值可能一旦初始化,就不要改变。
@aix发布的解决方案可以解决您的问题。