无法引用/修改内部类中的非final变量

Rav*_*vin 6 java inner-classes

所以我得到的错误是:"不能参考以不同方法定义的内部空间内的非最终变量角色".我希望能够将字符串roletype设置为该Dropdown中选择的任何get.如果不是我在下面尝试的方式,我怎么能这样做,或者我只是在我正在尝试的代码中犯了一些愚蠢的错误?

谢谢,拉文

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.*;
import javax.swing.event.*;

public class Funclass extends JFrame {

    FlowLayout layout = new FlowLayout();
    String[] skillz = {"Analytical", "Numerical", "Leadership",
        "Communication", "Organisation", "Interpersonal"};
    String[] rolez = {"Developer", "Sales", "Marketing"};
    String[] Industries = {"Consulting", "Tech"};
    String R1, R2, R3, R4, roletype;

    public Funclass() {
        super("Input Interface");
        setLayout(layout);
        JTextField Company = new JTextField("Company Name");
        JComboBox TYPE = new JComboBox(Industries);
        JList skills = new JList(skillz);
        JComboBox role = new JComboBox(rolez);
        skills.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
        add(TYPE);
        add(skills);
        add(role);
        add(Company);

        ROLE.addItemListener(new ItemListener() {

            public void itemStateChanged(ItemEvent event) {
                if (event.getStateChange() == ItemEvent.SELECTED) {
                    roletype = rolez[role.getSelectedIndex()];
                }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

Joã*_*lva 2

您需要将role变量声明为final以便内部类 ( ItemListener) 可以访问它,如下所示:

final JComboBox role = new JComboBox(rolez); 
Run Code Online (Sandbox Code Playgroud)

  • tskuzzy——最终的限制仅在访问定义局部类的方法内部的变量时适用。内部类仍然可以访问封闭类变量 (2认同)