获取通用接口的错误:接口Observer不能使用不同的参数多次实现:

时间:2010-11-26 03:57:07

标签: java gwt observer-pattern

我在编写GWT应用程序时在Eclipse中收到此错误

  

接口Observer不能   实施不止一次   不同的论点:   观察者< CompositeListData>和   观察者LT; DialogBoxAuthenticate>

public class CompositeWordLists extends Composite implements Observer<DialogBoxAuthenticate>, Observer<CompositeListData>

这是界面

public interface Observer<T> {
    public void update(T o);
}

这是对的吗?如何在不必为每个可能的事件创建大量Observer类的情况下解决这个问题?

3 个答案:

答案 0 :(得分:3)

由于类型擦除,您无法两次实现相同的接口(具有不同的类型参数)。所以,你收到的日食错误是正确的。

您可以为所有可能的“T”添加基类,这可能是限制性的,并且根据这些类的范围无用。并且,您已经请求了一个解决方案,可以阻止您为每个可能的事件创建大量的Observer类(我假设接口),我不知道如何在不影响编译时安全的情况下做到这一点。

我建议以下

interface Observer<T>{
    public void update (T o);
}

interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{
}

代码混乱并不可怕,如果将它们全部放在一个文件中,它们将很容易引用和维护。希望我帮助

编辑:在google上进行了一些挖掘之后(我将其指向了stackoverflow!),您的问题以不同的方式提出并以类似方式回答here

答案 1 :(得分:0)

Composite必须已经实现了Observer。这是真的意图吗?您希望此CompositeWordLists类一次观察两种方式吗?

答案 2 :(得分:0)

不确定这会有所帮助,但我今天遇到了相同的Java编译错误。

通过提取我可以访问参数化抽象类的所有共享实现,我部分地解决了我的问题:

public enum Example {
    ;
    static interface Observer<T> { public void update (T o); }
    static abstract AbstractObserver<T> implements Observer<T> {
        public void update (T o) { /* shared stuff I can put here */ }
    }
    static Composite extends AbstractObserver<Parameter1> {
        public void update (T o) {
            super(o);
            /* type-specific code here */
        }
    }
    static CompositeWordLists extends AbstractObserver<Parameter2> {
        public void update (T o) {
            super(o);
            /* type-specific code here */
        }
    }
}