Java 匿名类方法中的变量可见性

Java 匿名类方法中的变量可见性,java,Java,我对XMLTool java库有一个问题。让我们考虑下面的代码: private void parse() { List<String> list = new ArrayList<String>(); doc.gotoChild("Body") .gotoChild("ExternalListOfCodes") .forEachChild(new CallBack() { public void ex

我对XMLTool java库有一个问题。让我们考虑下面的代码:

private void parse() {
    List<String> list = new ArrayList<String>();

    doc.gotoChild("Body")
       .gotoChild("ExternalListOfCodes")
       .forEachChild(new CallBack() {

            public void execute(XMLTag doc) {
                if (doc.getCurrentTagName().equalsIgnoreCase("UnitOfMeasure")){
                    //Here's the problem!                
                    list.add(
                        doc.gotoChild("UnitOfMeasureCode").getInnerText()
                    );
                }
            }
        }
}
private void parse(){
列表=新的ArrayList();
gotoChild博士(“正文”)
.gotoChild(“外部代码”)
.forEachChild(新回调(){
公共作废执行(XMLTag文档){
if(doc.getCurrentTagName().equalsIgnoreCase(“测量单位”)){
//问题来了!
list.add(
doc.gotoChild(“计量单位代码”).getInnerText()
);
}
}
}
}
有一个循环
forEachChild
,我想实现的是将标签内容添加到列表中。当然,这是不可能的,因为变量
list
在那里不可见

有什么办法解决它吗?谢谢你的帮助!

它是可见的,你只需要将它设置为最终版本即可:

final List<String> list = new ArrayList<String>();
final List=new ArrayList();
更一般地说,匿名类(如您的
回调
)只能访问类外部的局部变量,如果这些变量声明为
final
,可见,您只需将其设置为
final

final List<String> list = new ArrayList<String>();
final List=new ArrayList();

更一般地说,匿名类(比如你的
回调
)只能访问类外部的局部变量,如果这些变量被声明为
final

,你救了我的一天。。感谢你的快速反应!:)@monczek:任何合适的IDE都会为你解决这个问题,例如,右键单击Eclipse中的错误,选择“快速修复”,它将使变量
成为final
。你救了我一天。。谢谢你的快速反应!:)@monczek:任何像样的IDE都会为您解决这个问题,例如,右键单击Eclipse中的错误,选择“快速修复”,它会使变量
final
(注意,从技术上讲,
list
在那里是可见的,除非标记为
final
,否则无法使用它)(注意,从技术上讲,这里可以看到
列表
,除非标记为
final
,否则不能使用它)