Java 什么是非最终变量?
我不理解Java 什么是非最终变量?,java,blackberry,java-me,Java,Blackberry,Java Me,我不理解final变量的概念。在for循环中,我有一个动态变量I,它对我引用数组至关重要。我一使用I,它就会抛出一个错误,告诉我应该是final 什么是最终版?你能帮我消除那个错误吗 我的代码在这里: for( int i = 0; i <4; i++) { Bitmap celeb1=Bitmap.getBitmapResource(fimagearray[i]); Bitmap celeb1_focus=Bitmap.getBitmapResource(fimagearr
final
变量的概念。在for
循环中,我有一个动态变量I
,它对我引用数组至关重要。我一使用I
,它就会抛出一个错误,告诉我应该是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);
}
for(int i=0;i最终变量只能通过初始值设定项或赋值语句初始化一次
查看它的链接
再看一个例子。匿名内部类只能从外部作用域访问final
变量。由于i
不是final,所以不能直接访问它。您不能将i
设为final,因为它需要更改,并且final变量不能更改
作为一种简单的解决方法,在每次循环迭代期间将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);
}
for(int i=0;i<4;i++)
{
final int index=i;//您正试图在“匿名内部类”中使用i
的值,该类要求将该类的所有非局部变量声明为final
,这意味着一旦初始化变量,其值可能不会更改
@aix发布的解决方案可以解决您的问题。无法从您的代码中分辨出来-如果您可以发布stacktrace,这将非常有用-但是如果您想将局部变量传递给新线程,通常需要将它们声明为final
,您正在调用的方法之一可以。请尝试创建i的final
版本
并且使用它:final int j=i;
final
,顺便说一句,这意味着变量的值不能被重新赋值。如果变量是不可变的,(如原语或字符串
s),这意味着它不能被更改。如果它是一个可变对象,则变量不能更改为引用其他对象,但对象的内部仍然可以更改。@Russell:“无法从您的代码中分辨”[sic]那么我想我没有引起足够的注意!:-)我希望所有这些单元格都有一个FieldChangeListener,并在fieldChanged中从单元格字段索引计算索引。非常感谢您让我了解最终变量,在我尝试在for循环之前将“index”变量声明为final之前,这就是为什么每次“index”值以前是0…现在,问题解决了,就像在你的代码中一样,每次它进入循环时,你都将“i”声明为final…非常感谢让我理解!!!:)这解决了我的问题谢谢链接…这很有用