Java 修改操作侦听器中的布尔值 代码: 错误:

Java 修改操作侦听器中的布尔值 代码: 错误:,java,swing,if-statement,swt,Java,Swing,If Statement,Swt,'无法分配最终局部变量saveedit,因为它是在封闭类型中定义的' 问题: 我已经看到了针对类似错误的其他解决方案,但必须有一种简单的方法来实现它——可能像更早地定义某个东西或移动它一样简单 我非常感谢您的帮助。我完全同意sager89。但我想在这里补充一点,那就是 如果关键字final用于实例变量,那么final变量只能在声明时分配一次,或者您必须在每个构造函数中分配一次。我完全同意sager89。但我想在这里补充一点,那就是 如果关键字final用于实例变量,那么final变量只能在声明时

'无法分配最终局部变量
saveedit
,因为它是在封闭类型中定义的'

问题: 我已经看到了针对类似错误的其他解决方案,但必须有一种简单的方法来实现它——可能像更早地定义某个东西或移动它一样简单

我非常感谢您的帮助。

我完全同意sager89。但我想在这里补充一点,那就是

如果关键字final用于实例变量,那么final变量只能在声明时分配一次,或者您必须在每个构造函数中分配一次。我完全同意sager89。但我想在这里补充一点,那就是


如果关键字final用于实例变量,那么final变量只能在声明时分配一次,或者必须在每个构造函数中分配一次。

如果要在内部类中使用变量(此处为
ActionListener>),则有两种选择(关于如何使用它,请修改(变异)或访问):

  • final
    关键字与局部变量一起使用(对于您的情况,不建议使用关键字,因为您希望在内部类中修改变量,而不是仅访问)
  • 使用字段VARABLE,该字段不必是
    最终的
    (建议使用

  • 正如我提到的,第二种解决方案对您来说是可行的,因为您希望执行正在变异的
    saveedit=false;

    如果您希望在内部类中使用变量(此处
    ActionListener
    ),您有两种选择(关于如何使用它,修改(变异)或访问):

  • final
    关键字与局部变量一起使用(对于您的情况,不建议使用关键字,因为您希望在内部类中修改变量,而不是仅访问)
  • 使用字段VARABLE,该字段不必是
    最终的
    (建议使用

  • 正如我所提到的,第二种解决方案对您来说是可行的,因为您希望执行正在发生变化的
    saveedit=false;

    这个问题不是重复的,答案是任何想简单移动的人都可以

    final boolean saveedit=true;
    要在这些线之间插入,请执行以下操作:

        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
    
                }
            }
        });
    

    这样,它就不会在封闭类型中定义:)

    这个问题不是重复的,答案是任何想简单移动的人都可以得到的

    final boolean saveedit=true
    要在这些线之间插入,请执行以下操作:

        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
    
                }
            }
        });
    
    这样,它就不会在封闭类型中定义:)