0

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

在一堂课上,我正在这样做:

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

这就是事情变得有趣的地方。所以make()这是上面调用的方法,它在 class 中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()

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

4

2 回答 2

3

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

这不是真的。

final Pizza pizza = this; 

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

于 2012-10-23T07:26:26.620 回答
1

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

public void make(){  
      registerUpdateHandler(new IUpdateHandler(){             
           @Override
           public void onUpdate(float cookTime){
                // need to do some modifications to pizza
                doSomething();
                doSomethingElse();
           }
      });
 }
于 2012-10-23T07:27:36.507 回答