在下面的代码中调用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)?
,响应是否有任何不同答案 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