Un'interfaccia covariante su T dovrebbe mai implementare un'interfaccia invariante su di esso?

6

Stavo leggendo i documenti di Hacklang su Collections e ho trovato questa curiosa definizione [parafrasata leggermente]:

interface KeyedIterable<Tk, Tv> ...
interface ConstVector<+Tv> implements KeyedIterable<int, Tv>  ...

Naturalmente, KeyedIterable deve essere di sola lettura rispetto a Tv, e infatti è perché i suoi metodi non possono modificare il suo tipo. potrebbe essere specificato come covariante su almeno Tv , ma non lo è.

Mi chiedevo quale impeto ci potesse essere per fare questo?

Modifica: ho letto la definizione errata, KeyedIterable è in realtà definito come KeyedIterable<Tk, +Tv> , quindi questa definizione ha perfettamente senso. Mi sto solo rendendo conto che non è tanto "dovrebbe o non dovrebbe", ma piuttosto "questo non è mai possibile".

    
posta concat 03.04.2016 - 04:17
fonte

1 risposta

-1

Supponi che l'interfaccia KeyedIterable implementa un metodo Combina che prende un'altra istanza KeyedIterable e la unisce a se stessa. Ciò comporterebbe una raccolta mista di diversi tipi. Quindi potrebbe esserci un metodo GetTotal che aggiunge tutti i valori nella raccolta e restituisce il risultato. Potrebbe esplodere, il vantaggio potrebbe essere sovraccaricato per il sottotipo e incompatibile con l'aggiunta del tipo di base.

Questa spiegazione sembra essere apprezzata: link

    
risposta data 03.04.2016 - 11:53
fonte

Leggi altre domande sui tag