Java 一般观测器-投射问题
我正在尝试创建一个通用的观察者模式,该模式模仿headFirst设计模式示例。我在标有???的行中出错???下面 错误消息显示:类型主题中的方法registerObserver(Observer)不适用于参数(CurrentConditionsDisplay) 接口1Java 一般观测器-投射问题,java,compiler-errors,observer-pattern,subject-observer,Java,Compiler Errors,Observer Pattern,Subject Observer,我正在尝试创建一个通用的观察者模式,该模式模仿headFirst设计模式示例。我在标有???的行中出错???下面 错误消息显示:类型主题中的方法registerObserver(Observer)不适用于参数(CurrentConditionsDisplay) 接口1 package be.intec.Meteo.Interfaces; import java.util.Observer; public interface Subject { public void registerO
package be.intec.Meteo.Interfaces;
import java.util.Observer;
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
接口2
package be.intec.Meteo.Interfaces;
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
接口3
package be.intec.Meteo.Interfaces;
public interface DisplayElement {
public void display();
}
天气数据类
package be.intec.Meteo.Codemeteo;
import java.util.ArrayList;
import be.intec.Meteo.Interfaces.Observer;
import be.intec.Meteo.Interfaces.Subject;
public class WeatherData implements Subject {
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData() {
observers = new ArrayList();
}
@Override
public void registerObserver(java.util.Observer o) {
observers.add(o);
}
@Override
public void removeObserver(java.util.Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
@Override
public void notifyObservers() {
for (int i = 0; i < observers.size(); i++) {
Observer observer = (Observer) observers.get(i);
observer.update(temperature, humidity, pressure);
}
}
public void mesurementChanged() {
notifyObservers();
}
public void setMeasurements(float temperature, float humidity,
float pressure) {
this.temperature = temperature;
this.humidity = humidity;
this.pressure = pressure;
}
// other weather data methos here
}
您的
主题
界面正在导入错误的观察者
类
你有:
import java.util.Observer;
public interface Subject {
你需要:
import be.intec.Meteo.Interfaces.Observer;
public interface Subject {
您正试图调用
WeatherData.registerObserver(java.util.Observer)
,并使用this
作为参数。但是作为be.intec.Meteo.Codemeteo.CurrentConditionsDisplay
的一个实例,它只实现了be.intec.Meteo.Interfaces.Observer
和be.intec.Meteo.Interfaces.DisplayElement
接口,这会导致编译错误
以下是几点观察:
- Java包应该全部是小写的(这样更容易区分什么是类,什么是包)
- 通常,如果您的类名不与其他类共享名称,则更容易避免类似的混淆(
vsbe.intec.Meteo.Interfaces.Observer
java.util.Observer
java.util.Observer
类时在代码中也是如此。
import java.util.Observer;
public interface Subject {
import be.intec.Meteo.Interfaces.Observer;
public interface Subject {