我在编写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类的情况下解决这个问题?
答案 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 */
}
}
}