2010-11-26 9 views
8

sto ottenendo questo errore in Eclipse durante la scrittura di un applicazione GWTOttenere errore per l'interfaccia generica: The Observer l'interfaccia non può essere attuato più di una volta con argomenti diversi:

L'Observer interfaccia non può essere implementato più di una volta con diversi argomenti: Observer <CompositeListData> e Observer <DialogBoxAuthenticate>

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

Qui è l'interfaccia

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

è questo diritto? Come posso aggirare questo problema senza dover creare una moltitudine di classi Observer per ogni possibile evento?

risposta

3

A causa della cancellazione del tipo non è possibile implementare la stessa interfaccia due volte (con diversi parametri di tipo). Quindi, l'errore di eclissi che stai ricevendo è corretto.

È possibile aggiungere una classe base per tutte le possibili "T", che potrebbero essere limitate e non utili a seconda dell'ambito di queste classi. E, hai richiesto una soluzione che ti impedisca di creare una moltitudine di classi di Observer (sto assumendo interfacce) per ogni possibile evento, beh non riesco a vedere in quale altro modo si farebbe senza compromettere la sicurezza del tempo di compilazione.

vorrei suggerire il seguente

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

interface DialogBoxAuthenticateObserver extends Observer<DialogBoxAuthenticate>{ 
} 

Il codice di disordine non è orribile e se li si inserisce in un unico file, che sarà facile fare riferimento e mantenere. Spero di aver aiutato

EDIT: Dopo un po 'scavare intorno su google (che mi ha segnalato di nuovo al StackOverflow !, la tua domanda è stato chiesto in modo diverso e ha risposto in modo simile here

+1

Quindi, ho appena provato questa soluzione sul mio attuale problema (quasi identico) e questa soluzione non ha funzionato. – Peaches491

+8

Non puoi farlo neanche. Otterrai lo stesso errore di interfaccia multipla. – Dzik

0

Il composito deve già implementare Observer. E 'quello che intendeva veramente? Vuoi che questa classe di CompositeWordLists osservi due modi contemporaneamente?

0

Non sono sicuro questo può aiutare, ma mi sono imbattuto lo stesso errore di compilazione Java oggi

ho parzialmente risolto il mio caso estraendo tutto l'attuazione condivisa ho potuto ottenere un parametrizzata classe astratta:.

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 */ 
     } 
    } 
} 
Problemi correlati