有一个简短的问题,我希望有人能回答。基本上我有一个 String 变量,它需要根据组合框中的值进行更改,组合框中附加了一个事件监听器。但是,如果我将字符串设置为最终字符串,则无法更改它,但如果我不将其设置为最终字符串,则 eclipse 会提示它不是最终字符串。最好(和最简单)的解决方法是什么?
代码如下
final String dialogOutCome = "";
//create a listener for the combo box
Listener selection = new Listener() {
public void handleEvent(Event event) {
//get the value from the combo box
String comboVal = combo.getText();
switch (comboVal) {
case "A": dialogOutCome = "a";
case "B": dialogOutCome = "b";
case "C": dialogOutCome = "c";
case "D": dialogOutCome = "d";
}
}
};
最佳答案
你不能。
考虑一下:
- 只要声明的方法运行,局部变量就存在。
- 一旦该方法调用结束(通常是因为该方法存在),变量就会消失
- 听众可以(而且通常确实)活得更久
那么当方法已经返回并且监听器试图修改局部变量时会发生什么?
因为这个问题没有很好的答案,他们决定通过不允许访问非 final
局部变量来使这种情况成为不可能。
解决这个问题有两种方法:
- 尝试更改字段而不是局部变量(这可能也更适合监听器的生命周期)或
- 使用
final
局部变量,您可以更改其内容(例如List
或String[]
与单个元素)。
关于Java - 如何在事件监听器中更改 'local?' 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382064/