我有一个Foo的数组列表,而Foo有一个Bar IntegerProperty和一个String BarName。
我想要的是从监听器访问对象Foo,然后改变BarName,类似于:
for(String b : BarNameList){
Foo f = new Foo();
f.setBarName(b);
f.addListener(new ChangeListener<Number>(){
@SuppressWarnings("rawtypes")
@Override
public void changed(ObservableValue<? extends Number> o,
Number oldVal, Number newVal) {
// I need to get which f is from the FooList here
// So I can, for example:
f.setBarName(f.getBarName() + newVal);
}
});
FooList.add(f);
}
我得到了一个错误,因为我的f不是final。
根据我的理解,这个问题与建议的方法有关:
作用域中不能访问Foo类型的封闭实例
如何在changed()
方法中获得f的实例?
您不能在匿名类的changed()
方法中访问变量f,除非将其定义为final。
final Foo f = new Foo();