回调方法中的对象引用

时间:2017-06-15 02:41:03

标签: java

在下面的代码中调用processStateChange()方法时,编译器如何知道要传递哪个对象?

public void onUpdate(Set<Object> objects)
{
    for(Object object : objects)
    {
        object.addUpdateListener(new UpdateListener()
        {
            @Override
            public void onUpdate()
            {
                processStateChange(object);
            }
        });
    }
}

如果循环是:for(final Object object:object)?

,响应是否有任何不同

1 个答案:

答案 0 :(得分:1)

要了解发生了什么,这里是java编译器如何看待你的代码:

public void onUpdate(Set<Object> objects) {
    for(Object object : objects) {
        object.addUpdateListener(new MyUpdateListener(object));
    }
}

class MyUpdateListener implements UpdateListener {
    final Object myObj; // I'm intentionally using different name here
    MyUpdateListener(Object myObj) {
        this.myObj = myObj;
    }
    @Override
    public void onUpdate() {
        processStateChange(this.myObj);
    }
}

因此,创建了多个UpdateListener实例,每个实例都保存对它自己object

的引用
相关问题