Ho letto spesso che i caratteri jolly Java sono un concetto più potente del concetto di varianza del sito d'uso. Ma a mio avviso, il concetto di jolly Java è esattamente uguale a il concetto di varianza del sito di utilizzo.Perché i caratteri jolly Java sono più potenti della varianza del sito di utilizzo?
Quindi qual è la differenza tra i due? Puoi dare un esempio concreto che è possibile con i jolly Java, ma non con l'uso della varianza del sito?
Per esempio, la prima risposta in How does Java's use-site variance compare to C#'s declaration site variance? è un esempio in cui è fornita l'indicazione della mia domanda:
Prima di tutto, se non ricordo male usare loco varianza è strettamente più potente di declaration- varianza del sito (sebbene al costo della concisione ), o almeno i caratteri jolly di Java sono (che sono in realtà più potenti della varianza del sito di utilizzo).
Tuttavia, la risposta non indica qual è la differenza, solo che ce n'è uno.
Edit: Una prima differenza che ho trovato here (primo paragrafo a pagina 112) sembra essere che l'uso in loco varianza non consente completamente chiamando un metodo che ha un parametro di tipo nella posizione sbagliata, mentre i caratteri jolly consentono definendolo con alcuni tipi. Ad esempio, non è possibile chiamare add
, su un List<? extends String>
. Con caratteri jolly Java, è possibile chiamata add
su una tale classe, ma è necessario utilizzare null
come argument.For controvarianza, uno può chiamata di un metodo che restituisce un parametro controvariante ma si deve presumere che il tipo di ritorno è Object
. Ma questa è l'unica differenza?
È diverso da questa domanda? http://stackoverflow.com/questions/4231305/how-does-javas-use-site-variance-compare-to-cs-declaration-site-variance –
@IsaiahvanderElst: No, la domanda che hai collegato riguarda il sito di dichiarazione varianza (ad es., C# 'out') vs. usa la varianza del sito. La mia domanda riguarda l'uso della varianza del sito rispetto ai caratteri jolly che sembrano essere esattamente gli stessi per me. Ma la prima risposta nella domanda che hai collegato dichiara almeno la mia affermazione: "o almeno i caratteri jolly di Java sono (che sono in realtà più potenti della varianza del sito di utilizzo)" – gexicide
@IsaiahvanderElst: ho espresso in modo errato la prima frase del mio commento precedente. Quello che volevo dire era "** Sì **, questa domanda è completamente diversa da quella che hai collegato". Spero che sia chiaro nella spiegazione. – gexicide