【问题标题】:Observer pattern issues Java观察者模式问题 Java
【发布时间】:2016-02-18 16:04:15
【问题描述】:

我正在尝试在 java 中实现一个简单的观察者模式,但我遇到了一个我似乎无法弄清楚的问题。我有以下内容:

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);
        }

    }
    ...
}

当我尝试调用 view.update() 方法时,我的 notifyView() 方法出现错误。我得到的错误是:

The method update(Observable, Object) in the type Observer is not applicable for the arguments (ArrayList&lt;Integer&gt;)

我不明白这一点,因为我有我的观察者接口,类设置如下:

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

    }

}

我尝试阅读其他帖子,但没有任何帮助。有什么我忽略的东西导致了这个问题吗?

【问题讨论】:

  • what @Tichodroma siad - 你可能在你的 IDE 和 import java.util.Observer 甚至 import java.util.* 在你的 .java 文件的标题中启用了自动导入 - 删除它,代码应该可以工作.这正是SSCCE 的用途——如果你创建了它,那么没有 SO,你很可能已经解决了你的问题。
  • 是的,就是这样。我导入了 Java Observer,甚至没有注意到。傻视。谢谢@vaxquis

标签: java observer-pattern


【解决方案1】:

您的代码没有使用您的 Observer 类,而是使用 Java 的 Observer 类

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

【讨论】:

    【解决方案2】:

    您应该将您的 Observer 接口名称重命名为另一个以查看问题。例如我的观察者。您与 JDK 标准 Observer 接口(请参阅您的 Data.java 导入部分)和您的 Observer 接口有冲突。接口名称更准确。

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 1970-01-01
      • 2016-02-20
      • 2023-04-10
      • 1970-01-01
      • 2012-02-15
      • 2012-12-29
      • 2021-12-14
      • 1970-01-01
      相关资源
      最近更新 更多