2010-11-26 9 views
8

estoy recibiendo este error en Eclipse al escribir una aplicación GWTerror al obtener de interfaz genérica: El Observador interfaz no se puede implementar más de una vez con diferentes argumentos:

El Observador interfaz no puede ser implementado más de una vez con argumentos diferentes: Observador <CompositeListData> y Observador <DialogBoxAuthenticate>

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

Aquí es la interfaz

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

¿Es esto así? ¿Cómo puedo evitar este problema sin tener que crear una multitud de clases de observadores para cada evento posible?

Respuesta

3

Debido al borrado de tipos, no puede implementar la misma interfaz dos veces (con diferentes parámetros de tipo). Entonces, el error de eclipse que está recibiendo es correcto.

Puede agregar una clase base para todas las posibles "T", que pueden ser limitantes y no útiles según el alcance de estas clases. Y, ha solicitado una solución que le impide crear una multitud de clases Observer (estoy asumiendo interfaces) para cada evento posible, así que no puedo ver cómo lo haría sin comprometer la seguridad del tiempo de compilación.

que sugeriría la siguiente

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

interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{ 
} 

El código desorden no es horrible y si se colocan todos en un solo archivo, que será fácil hacer referencia y mantener. Espero haber ayudado

EDITAR: Después de algo de investigación en torno a Google (que me señaló de nuevo a Stackoverflow !, se le pidió a su pregunta de una manera diferente y respondió de manera similar here

+1

Así que, acabo de probar esta solución en mi problema actual (casi idéntico), y esta solución no funcionó. – Peaches491

+8

No puedes hacer eso, tampoco. Obtendrá el mismo error de interfaz múltiple. – Dzik

0

El compuesto ya debe implementar Observer. ¿Eso es lo que realmente pretendía? ¿Desea que esta clase CompositeWordLists observe dos maneras a la vez?

0

No estoy seguro de que esto puede ayudar, pero me encontré con el mismo error de compilación de Java hoy

he resuelto parcialmente mi caso mediante la extracción de toda la aplicación compartida que pudiera llegar a una clase parametrizada abstracta :.

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 */ 
     } 
    } 
} 
Cuestiones relacionadas