在制作 Android 应用程序时,我遇到了有关从内部类访问非最终变量的问题。二手 This作为引用。
我想问一下什么是“正确”和有效的方法来做到这一点? 我的两个解决方案如下:
for (Button b : buttonArray) {
final Button bb = b;
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
text.append(bb.getText().toString());
//Appending "1".."0" to a textView
}
});
}
或
for (final Button b : buttonArray) {...}
//请随时提出更好的方法。后面我会尝试使用lambda表达式来美化代码
最佳答案
这之间没有性能差异:
for (Button b : buttonArray) {
final Button bb = b;
...
...
还有这个:
for (final Button b : buttonArray) {...}
但是,我推荐第二种方法,因为我认为创建一个新变量指向内存中与您随后操作的迭代变量相同的对象是冗余。 p>
此外,使用 lambda 表达式可以使代码更简洁:
for (Button b : buttonArray) {
b.addActionListener(v -> {
text.append(b.getText().toString());
});
}
请注意,在这种情况下,我们甚至不需要将迭代变量声明为 final,因为它已经满足 effectively final 规则。
顺便说一句,您可以像这样使用流来转换整个代码:
Arrays.stream(buttonArray).forEach(button -> {
button.addActionListener(v -> {
text.append(button.getText().toString());
});
});
关于java - 在内部类中访问 for 循环变量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743746/