这应该非常简单,但是我无法使它正常工作。

//decreases the temperature automatically over time
Heating heating = new Heating(25);
//SHOULD watch when the temp drops below a threshold
Observer watcher = new Watcher();
heating.addObserver(watcher);


加热有

public void turnOn()




public void turnOff()


达到阈值时,将某些内容打印到sysout没问题

    class Watcher implements Observer {


    private static final int BOTTOM_TEMP = 23;

    @Override
    public void update(Observable o, Object arg) {

        double temp = Double.parseDouble(arg.toString());

        if (temp < BOTTOM_TEMP) {
            //System.out.println("This works! The temperature is " + temp);
            o.turnOn();  //doesn't work
            heater.turnOn();  //doesn't work either
        }
    }
}


因此,简而言之:如何从观察者内部调用可观察对象的turnOn()方法?上述尝试导致“方法未定义”和“无法解决加热”。

方法是公开的,对象存在并且观察者已注册。
我想念什么?

最佳答案

您需要将Observable强制转换为Heating才能调用属于Heating对象的方法。像这样:

if (temp < BOTTOM_TEMP) {
  //System.out.println("This works! The temperature is " + temp);
  if (o instanceof Heating){
    ((Heating)o).turnOn();
  }
}

09-25 21:44