无法将值赋给Java中的“最终”变量

 private void pushButtonActionPerformed(java.awt.event.ActionEvent evt)

{

final int c=0;

final JDialog d=new JDialog();

JLabel l=new JLabel("Enter the Element :");

JButton but1=new JButton("OK");

JButton but2=new JButton("Cancel");

final JTextField f=new JTextField(10);

JPanel panel = new JPanel();

but1.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

c=Integer.parseInt(f.getText());

d.setVisible(false);

d.dispose( );

}

});

but2.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

d.setVisible(false);

d.dispose( );

}

});

}

我正在使用netbeans 7.1.1。这是我的代码,在这里我已将“ c”声​​明为“ final int”,但行“ c =

Integer.parseInt(f.getText());” 我收到一个错误“无法为最终变量赋值”。如果我从声明中删除final一词,并使之与“ int

c”相同,则在同一行中会出现错误“无法从类内访问局部变量c;需要声明为final”。谁能告诉我为什么会这样?

回答:

您已经在函数中声明了 c ,然后在该函数中创建了一个匿名内部类。这个内部类ActionListener会在函数终止后持续存在-

因为c对于函数来说是本地的,所以它无法为c赋值。

关于“最终”的警告具有误导性-

只是编译器告诉您不能从匿名类访问瞬时局部变量。您不能仅通过使c为final来解决问题,因为这将根本阻止对它的任何赋值,但您可以使c成为类pushButtonActionPerformed

实例成员 。像这样:

class Something

{

int c;

private void pushButtonActionPerformed(java.awt.event.ActionEvent evt)

{

JButton but1=new JButton("OK");

but1.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

c=Integer.parseInt(f.getText());

}

});

}

}

以上是 无法将值赋给Java中的“最终”变量 的全部内容, 来源链接: utcz.com/qa/410803.html

回到顶部