2015-06-16 10 views
10

Si è verificato un problema con tipi di ritorno incompatibili utilizzando l'ereditarietà."Tentativo di utilizzare un tipo di reso non compatibile" con Eredità di interfaccia

public interface A { } 
public interface B extends A { } 

public interface C { 
    Map<String, A> getMapping(); 
} 

public interface D extends C { 
    Map<String, B> getMapping(); 
} 

C'è un modo per farlo funzionare?

In questo momento il compilatore mi dice che sono 'Il tentativo di utilizzare un tipo di ritorno incompatibili' sull'interfaccia D.

+0

@alfasin corrette, aggiornate domande - mi dispiace! – jjNford

+0

Questa è una grande novità per la tua domanda. @ user3707125: ha la tua soluzione allora. –

+0

Sembra una risposta qui ragazzi ... – vikingsteve

risposta

17

vi suggerisco di utilizzare

interface C { 
    Map<String, ? extends A> getMapping(); 
} 

Questo dice "Una mappa che mappa String a A o un sottotipo di A ". Questo è compatibile con Map<String, B>.

+0

Sì! Questo mi stava facendo impazzire. Ho avuto un metodo di interfaccia dichiarato per restituire un 'Set ' e una classe di implementazione impostata per restituire 'Set '. Ciò ha provocato l'errore nella domanda. Cambiando la dichiarazione dell'interfaccia su 'Set 'risolto il problema. Grazie! –

1

apportare le seguenti modifiche:

interface C<E extends A> { 
    Map<String, E> getMapping(); 
} 

interface D extends C<B> { 
    Map<String, B> getMapping(); 
} 
Problemi correlati