我有一个对象,当我为它调用适当的实例方法时,我想修改它。(我认为这是正确的词汇)
从一个班级开始,我正在这样做:
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
对象,该对象类型为final
make()
,该对象不再是我想调用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();
}
});
}