无法分配最终的局部变量“name”,因为它是在封闭类型中定义的

时间:2013-11-17 16:15:00

标签: java class variables methods visibility

我有这堂课:

class Tester{
    final String rigaFile=riga;
    final BufferedReader r=new BufferedReader(reader2);

    fr.getList().addListSelectionListener(new ListSelectionListener() {


        public void valueChanged(ListSelectionEvent e) {
            if (!e.getValueIsAdjusting()) {
                //                  fr.getLabel().setText(fr.getList().getSelectedValue().toString());
                while(rigaFile!=null)
                {                   
                    String[] parts=rigaFile.split("\t");
                    for(int i=0;i<dim;i++)
                    {
                        if(listaPath.get(i).equals(parts[1]) && parts[1].substring(parts[1].lastIndexOf('/')+1, parts[1].length()).equals(fr.getList().getSelectedValue().toString()))
                        {
                            fr.getLabel().setText(fr.getList().getSelectedValue().toString());
                        }

                    }
                    try {
                        rigaFile=r.readLine();
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }

            }

        }
    });

}

}

变量“rigaFile”会引发以下错误: “无法分配最终的局部变量rigaFile,因为它是在封闭类型中定义的”。 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

内部类只能在最终时访问周围类的变量。这意味着您无法更改参考。由于java中的字符串是不可变的,因此您也无法更改其值。

一种可能的解决方案是使用最终StringBuilder而不是String,并在匿名内部类中更改其内容。

final StringBuilder rigaFile = new StringBuilder(riga);
...
          try {
              rigaFile.setLength(0);
              rigaFile.append(r.readLine());
          } catch (IOException e1) {

您还必须更改while条件,因为rigaFile永远不会为null。要获取rigaFile的字符串值,您可以编写rigaFile.toString()