I am getting this error in Eclipse while writing a GWT app
The interface Observer cannot be implemented more than once with different arguments: Observer<CompositeListData > and Observer<DialogBoxAuthenticate>
public class CompositeWordLists extends Composite implements Observer<DialogBoxAuthenticate>, Observer<CompositeListData>
Here is the interface
public interface Observer<T> {
public void update(T o);
}
Is this right? How can I get around this problem without having to create a multitude of Observer classes for every possible event?
Because of type erasure you can't implement the same interface twice (with different type parameters). So, the eclipse error that you are receiving is correct.
You could add a base class for all possible "T", which may be limiting and not useful depending on the scope of these classes. And, you have requested a solution that prevents you from creating a multitude of Observer classes (i am assuming interfaces) for every possible event, well I can't see how else you would do that without compromising compile time safety.
I would suggest the following
interface Observer<T>{
public void update (T o);
}
interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{
}
The code clutter isn't horrible and if you place them all in one file, they will be easy to reference and maintain. Hope I have helped
EDIT: After some digging around on google (which pointed me back to stackoverflow!, your question was asked in a different fashion and answered similarly here
Composite must already implement Observer. Is that what really intended? You want this CompositeWordLists class to observe two ways at once?
Not sure this can help, but I came across the same Java compile error today.
I partially solved my case by extracting all the shared implementation I could get to a parametrized abstract class:
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 */
}
}
}
来源:https://stackoverflow.com/questions/4282437/getting-error-for-generic-interface-the-interface-observer-cannot-be-implemente