如果实例方法创建内部类,如何让实例方法修改对象?



我有一个对象,当我为它调用适当的实例方法时,我想修改它。(我认为这是正确的词汇)

从一个班级开始,我正在这样做:

Pizza pizza = new Pizza();
pizza.addTopping(Cheese);
pizza.addTopping(Pepperoni);
pizza.setCrustType("thick");
pizza.make();
pizza.putInOven();

这就是事情变得有趣的地方。所以这是上面调用的make()方法,该方法在类Pizza中。

public void make()
{  
final Pizza pizza = this;
pizza.registerUpdateHandler(new IUpdateHandler()
{             
@Override
public void onUpdate(float cookTime)
{
// need to do some modifications to pizza
pizza.doSomething();
pizza.doSomethingElse();
}
});
}

为了能够访问内部类 IUpdateHandler() 中的披萨对象,我必须将Pizza对象设置为this。但是,它也必须final,因为您:

Cannot refer to a non-final variable inside an inner class defined in a different method.

回到我的原始代码片段,我仍然需要调用pizza.putInOven()并让它引用与所有其他调用相同的Pizza对象,但对make()方法的修改生效。因为我必须在方法中创建一个新的Pizza对象,该对象类型为finalmake(),该对象不再是我想调用putInOven()时修改的同一对象。

如何解决此问题?如果我的问题不清楚,我会尽力编辑和重申,只需发表评论。

因为我必须在方法make()中创建一个新的类型为final的Pizza对象,该对象不再是我想调用putInOven()时修改的相同对象。

那不是真的。

final Pizza pizza = this; 

此行不会创建新对象,因为您没有使用new运算符。因此,它是this引用的同一对象,因此您的putInOven将看到make方法所做的更改。

您不需要额外的 pizza 变量,因为代码已经在 pizza 对象中执行。

public void make(){  
registerUpdateHandler(new IUpdateHandler(){             
@Override
public void onUpdate(float cookTime){
// need to do some modifications to pizza
doSomething();
doSomethingElse();
}
});
}

最新更新