final boolean saveedit = true;
btnSaveEdit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (saveedit) {
// save function
if (txtMessage.getText().length() != 0) {
message = txtMessage.getText();
}
// show popup
JOptionPane.showMessageDialog(frmEventsAndProperties,
"Your last message is: " + message, "Message",
JOptionPane.PLAIN_MESSAGE);
btnSaveEdit.setText("Edit");
txtMessage.setEnabled(false);
saveedit = false;
} else {
// edit function
}
}
});
'无法分配最终的局部变量
saveedit
,因为它是在封闭类型中定义的。
我已经看到了类似相同错误的其他解决方案,但必须有一种简单的方法来实现它 - 可能就像之前定义某些内容或移动它一样简单。
我将不胜感激。
答案 0 :(得分:3)
如果您想在内部类(此处为ActionListener
)中使用变量,您有两种选择(关于如何使用它,修改(变异)或访问):
final
关键字与局部变量一起使用(对于您的情况,不推荐,因为您希望在内部类中修改您的变量, 不能仅访问)final
(推荐)正如我所提到的,seconed解决方案对你来说是可行的,因为你想做saveedit = false;
变异。
答案 1 :(得分:2)
我完全同意 sager89 。但我想在这里添加一件事。
如果关键字final用于实例变量,则最终变量只能在声明时分配一次,或者您必须在每个构造函数中分配一次。
答案 2 :(得分:0)
这个问题不重复,答案是任何想要简单移动的人
final boolean saveedit = true;
介于这些界限之间:
btnSaveEdit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
这样它就没有在封闭类型中定义:)