无法将值赋给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