我在ChangeListener的构造函数中向JTabbedPane添加JFrame。在stateChanged方法内部,我有一个带有在构造函数中接收的参数的方法,但它必须是final。有可能避免这种情况吗?

 public PerfilPaciente(int operation, Patient patient) {
 tabPane.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            switch (tabPane.getSelectedIndex()) {
                case 1:
                    loadDates(patient);   // here is the problem
                    break;
            }
        }
    });

最佳答案

匿名类中最多使用Java 7(含)变量,必须明确声明为final。在您的情况下:

public PerfilPaciente(int operation, final Patient patient) {


在Java 8中,不再需要此变量,该变量仅需有效地为final(即,永不在封闭方法中对其进行重新分配)。因此,使用Java 8可以编译代码。

关于java - 是否有可能避免将一个对象声明为final?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22566488/

10-12 21:51