wildcard java con interfaccia

Pubblicità

meltdown

Utente Attivo
Messaggi
47
Reazioni
5
Punteggio
26
sto facendo un'interfaccia che poi sarà implementata con varie classi in modi diversi.
Esempio: la mia interfaccia si chiama "CasaInterfaccia" e le sue stanze "StanzaInterfaccia"

CasaInterfaccia deve essere iterabile, in modo tale che il suo Iterator iteri le sue stanze. Il problema è che a seconda delle implementazioni, il metodo iterator() restituirà cose diverse, ad esempio se eseguito su una CasaImplementazioneA mi dovrà dare un Iterator<StanzeImplentazioneA> oppure se su una CasaImplementazioneB un Iterator<StanzeImplentazioneB>


Il metodo non è un problema, basta fare

public Iterator<? extends CasaInterfaccia> iterator();

il punto è l'intestazione della classe, che consiste in un decisamente antiestetico

public interface CasaInterface<A extends CasaInterface<A>> extends Iterable<A>

per non parlare delle classi che la implmentano dove dovrei ripetere

public class CasaImplementazioneA implements CasaInterface<CasaImplementazioneA>

... per non parlare che per rispettare la semantica ogni qualvolta nomino una CasaInterface generica (cioè senza sapere com'è stata implementata) devo mettere un ? nella wildcard


Il problema insomma è che usare un Iterator<A> è diverso da Iterator<B> anche se B è una sottoclasse di A. Non voglio dire che non mi funziona, ma non mi piace. Soluzioni?
 
Pubblicità
Pubblicità
Indietro
Top