从侦听器访问非最终对象

时间:2014-06-10 18:31:15

标签: java properties listener

我有一个Foo的ArrayList,而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不是最终的。

根据我的理解this question与我建议的方法有关,我得到:

在范围内无法访问Foo类型的封闭实例。

如何在changed()方法中获取此f实例?

1 个答案:

答案 0 :(得分:1)

除非将其定义为final,否则无法从匿名类的changed()方法中访问变量f。

final Foo f = new Foo();