Android 当使用foreach循环迭代arraylist以不使实例成为最终实例时,是否有解决方法?
因此,当我遍历我的按钮数组列表时,我试图设置它们的所有onClickedListener()/onFocusChangedListener(),但当涉及到修改或更改数组列表中的按钮时,它告诉我它必须是最终的 代码: 所以它要求它变成这样Android 当使用foreach循环迭代arraylist以不使实例成为最终实例时,是否有解决方法?,android,loops,foreach,final,modifier,Android,Loops,Foreach,Final,Modifier,因此,当我遍历我的按钮数组列表时,我试图设置它们的所有onClickedListener()/onFocusChangedListener(),但当涉及到修改或更改数组列表中的按钮时,它告诉我它必须是最终的 代码: 所以它要求它变成这样 for(最终按钮aBtn:菜单按钮) 有人能给我解释一下吗,我现在不是100%的工作,我不明白为什么它必须是最终的 我已经找到了使用其他方法迭代数组列表的其他方法,但这让我感到困扰。final关键字意味着您不能在其范围内更改变量的值。对于循环示例,您可以认为变量
for(最终按钮aBtn:菜单按钮)
有人能给我解释一下吗,我现在不是100%的工作,我不明白为什么它必须是最终的
我已经找到了使用其他方法迭代数组列表的其他方法,但这让我感到困扰。final关键字意味着您不能在其范围内更改变量的值。对于循环示例,您可以认为变量在循环的底部超出范围,然后在循环的顶部返回一个新值。分配给循环中的变量将不起作用。让我们后退一步,看看这里发生了什么:
for(Button aBtn : menu_Buttons)
{
aBtn.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View arg0, boolean changed) {
Log.i("LC", "focus changed");
if(changed)
{
aBtn.setTextColor(Color.parseColor("#FFFFFF"));
Log.i("LC", "true");
}
else
{
aBtn.setTextColor(Color.parseColor("#CD6839"));
Log.i("LC", "false");
}
}
});
if(someCondition) {
aBtn = someOtherButton;
}
}
在这种情况下,aBtn发生了变化,那么当调用内部类的一个方法时,内部类应该使用哪个按钮实例呢?无论编译器选择哪一种,都会给程序员带来歧义,这反过来很容易成为微妙且难以追踪的bug的来源
通过在内部类中引用的实例变量上强制使用final,编译器消除了这种歧义,使编写正确的程序变得更容易。我现在明白了,我无法想象它背后更大的含义!谢谢你的信息!
for(Button aBtn : menu_Buttons)
{
aBtn.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View arg0, boolean changed) {
Log.i("LC", "focus changed");
if(changed)
{
aBtn.setTextColor(Color.parseColor("#FFFFFF"));
Log.i("LC", "true");
}
else
{
aBtn.setTextColor(Color.parseColor("#CD6839"));
Log.i("LC", "false");
}
}
});
if(someCondition) {
aBtn = someOtherButton;
}
}