2013-07-11 6 views
5

Siamo in grado di farla franca con questo in .NET:Perché Java non consente sovraccarichi in base ai parametri di tipo?

interface I<A> {} 
interface I<A, B> {} 

... ma in Java, lo stesso codice si tradurrà in un errore di compilazione.

Questo è interessante, dato che anche se le informazioni sul tipo sono passate in fase di esecuzione, ci si aspetterebbe che le informazioni sul numero del parametro di tipo siano ancora lì.

Se questa limitazione è correlata alla cancellazione del tipo, qualcuno può spiegare perché?

+0

La limitazione è che non è possibile definire un'interfaccia più di una volta e non è possibile sovraccaricarla in questo modo. In fase di runtime, la cancellazione del tipo garantirebbe che sia 'I' sia effettivamente lo stesso tipo che non è consentito, o tecnicamente non farebbe quello che vuoi. –

risposta

6

non è legato alla cancellazione di tipo tanto da l'ambiguità che deriverebbero dall'utilizzo del raw type:

I eye = null; // which 'I' is it? 

tipi prime sono autorizzati al fine di ospitare il codice scritto prima generici sono stati introdotti nel JDK 5.0.

+0

quindi il problema non è la cancellazione di tipo di per sé, solo il fatto che Java consente l'uso di tipi non elaborati che sostanzialmente equivale a passare in modo implicito l'oggetto come argomento di tipo? –

+0

In che modo .NET risolve questo problema? I tipi grezzi non sono consentiti? – Thilo

+0

@JSmith Sì, sì – arshajii

1

In java, una classe/interfaccia generica ha un numero fisso di parametri generici. È solo il modo in cui viene definita la lingua.

La cosa più vicina a ciò che si sta parlando potrebbe essere:

interface I<A> {} 
interface J<A, B> extends I<A> {} 

un'istanza di J è ancora assegnabile a una variabile di tipo I.

Problemi correlati