有一个简短的问题,我希望有人能回答。基本上我有一个字符串变量,需要根据组合框中的值进行更改,该组合框中附加了一个事件侦听器。但是,如果我将字符串定为最终的,那么它就无法更改,但如果我不将其定为最终的,那么 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
局部变量。
有两种方法可以解决这个问题:
- 尝试更改字段而不是局部变量(这可能也更适合侦听器的生命周期)or
- use a
final
局部变量,您可以更改该变量content(例如List
or a String[]
与单个元素)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)