Java 匿名类方法中的变量可见性
我对XMLTool 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
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
,否则不能使用它)