从侦听器访问非final对象



我有一个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();

最新更新