接口的实现:对象类型不正确

时间:2014-04-09 23:19:11

标签: java object interface polymorphism

我尝试使用订阅者发布者模式时遇到了问题。我创建了一个接口Publisher,因此我可以区分非Publisher类和Publisher类。 Subscriber应该只能订阅Publisher

但是,如何从Publisher课程中获取所需的数据?具体来说,我有这个类Camera,我知道它必须从Entity对象获取数据。 Entity实施Publisher。尽管如此,编译器并不希望我以我喜欢的方式获取数据。我该如何规避这个问题?不幸的是,我不能从我的Publisher接口中创建一个抽象类,因为我想在其他类的extends中使用它。

public class Camera implements Subscribers{
    @Override                                     
    /*compiler error shown: "method does not override or implement 
     *a method from a supertype"
     */
    public void publisherUpdated(Entity e)
    {
        //code that uses the Entity object
    }
}

public class Entity extends JLabel implements Publisher{
    //[...]
}

import java.util.ArrayList;
public interface Publisher {
    final ArrayList<Subscribers> subs = new ArrayList<Subscribers>();
    public void updateSubscribers(Publisher p);
}

1 个答案:

答案 0 :(得分:0)

您可以在getSubscribers()界面中创建一个名为Publisher的方法,让接口的实现管理订阅者:

public interface Publisher {
    public List<Subscriber> getSubscribers(); 
    // ...
}

public class PublisherImplementation implements Publisher {
    private final List<Subscriber> subscribers = new ArrayList<Subscriber>();
    public List<Subscriber> getSubscribers() {
        return subscribers;
    }
    // ...
}