简体   繁体   English

Java的观察者模式问题

[英]Observer pattern issues Java

I am trying to implement a simple observer pattern in java and I am running into an issue that I cannot seem to figure out. 我试图在Java中实现一个简单的观察者模式,但遇到了一个似乎无法解决的问题。 I have the following: 我有以下几点:

public interface Observable {
    public void addView(Observer view);
    public void removeView(Observer view);
    public void notifyView();
    public Object getUpdate(Observer view);
}

public class Data implements Observable {

    //List to hold all of the views observing data changes. 
    private ArrayList<Observer> views = new ArrayList<Observer>(); 
    private ArrayList<Integer> data = new ArrayList<Integer>(); 

    ...
    @Override
    public void notifyView() {
        for (Observer view: views){
             //issue here
             view.update(data);
        }

    }
    ...
}

I am getting an error in my notifyView() method when I try to call the view.update() method. 当我尝试调用view.update()方法时,我的notifyView()方法出现错误。 The error I get is: 我得到的错误是:

The method update(Observable, Object) in the type Observer is not applicable for the arguments (ArrayList<Integer>)

I do not understand this because I have my Observer interface, and class set up as follows: 我不明白这一点,因为我有Observer接口,并且类设置如下:

public interface Observer {

    public void update(ArrayList<Integer> data); 

}

public class View implements Observer{

    @Override
    public void update(ArrayList<Integer> data) {
        // TODO Auto-generated method stub

    }

}

I have tried reading other posts but nothing has helped me. 我曾尝试阅读其他文章,但没有任何帮助。 Is there something I am overlooking that is causing this problem? 我是否忽略了导致此问题的某些内容?

Your code is not using your Observer class, instead, is using the Java's Observer class 您的代码不是使用Observer类,而是使用Java的Observer类

https://docs.oracle.com/javase/7/docs/api/java/util/Observer.html https://docs.oracle.com/javase/7/docs/api/java/util/Observer.html

You should rename your Observer interface name to another to see problem. 您应该将Observer接口名称重命名为另一个,以查看问题。 For example MyObserver. 例如MyObserver。 You have conflict with JDK standard Observer interface ( please see your Data.java import section) and your Observer interface. 您与JDK标准Observer接口(请参阅Data.java导入部分)和Observer接口发生冲突。 Be more accurate with interface names. 接口名称更加准确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM