java - 如何将非最终变量传递给匿名内部类?

标签 java inner-classes anonymous-inner-class

我有这些代码行。我知道您不能将非最终变量传递给内部类,但我需要将变量 i 传递给匿名内部类以用作 seatingID。你能建议这样做的方法吗?

JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
for (int i = 0; i < 40; i++)
{
    seats[i] = new JButton();//creating the buttons
    seats[i].setPreferredSize(new Dimension(50,25));//button width
    panel4seating.add(seats[i]);//adding the buttons to the panels

    seats[i].addActionListener(new ActionListener()
    {  //anonymous inner class
        public void actionPerformed(ActionEvent evt)
        {  
            String firstName = (String)JOptionPane.showInputDialog("Enter First Name");
            String lastName = (String)JOptionPane.showInputDialog("Enter Last Name");

            sw101.AddPassenger(firstName, lastName, seatingID);
        }
    });
}

最佳答案

简单的方法是创建一个局部final变量并用循环变量的值初始化它;例如

    JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray
    for (int i = 0; i < 40; i++)
    {
        seats[i] = new JButton();//creating the buttons
        seats[i].setPreferredSize(new Dimension(50,25));//button width
        panel4seating.add(seats[i]);//adding the buttons to the panels
        final int ii = i;  // Create a local final variable ...
        seats[i].addActionListener(new ActionListener()
         {  //anonymous inner class
            public void actionPerformed(ActionEvent evt)
            {  
                String firstName = (String)JOptionPane.showInputDialog("Enter First Name");
                String lastName = (String)JOptionPane.showInputDialog("Enter Last Name");

                sw101.AddPassenger(firstName, lastName, ii);
            }
         });
    }

关于java - 如何将非最终变量传递给匿名内部类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6319828/

相关文章:

java - "Code as Data"是什么意思?

java - 2 种布局和一个弹出窗口

java - 带有 MultiTenantConnectionProvider 的 Springboot Multi-Tenancy 总是抛出 org.apache.tomcat.jdbc.pool.PoolExhaustedException :

java - 如何从内部类访问外部类的 "this"?

C++ 将内部结构作为参数传递

java - 如何根据最终局部变量在匿名内部类中设置条件断点?

java - 是否可以在 displayMsg() 函数中访问 getVal() 函数?

java - 返回嵌套类中内部类的实例

java - 在后台运行进程,linux ubuntu

c# - 其参数扩展嵌套类的泛型类