2011-12-14 11 views
5

sto definizione di una classe:Java generici tipo di parametro nasconde

class Foo<I extends Bar & Comparable<I>> { 
} 

il compilatore si lamenta I essere nascosta da I. Immagino che la seconda volta che I appare nella definizione è nascosto nel campo di applicazione del primo, come se la variabile I potesse essere assegnata a due diversi tipi. Come farlo correttamente?

Edit:

si tratta di una classe interna. il codice completo può essere:

class Baz<I> { 
    class Foo<I extends Bar & Comparable<I>> { 
    } 
} 

Ora il problema è che se ho ri-nominare interna I-J, io non sono sicuro che I e J sono in realtà gli stessi tipi.

+4

Compiles for me - esiste un tipo "I" definito altrove nel codice? –

+1

Lo stesso, nessun avvertimento per me. – n1r3

+1

terzo. Compila bene. – asenovm

risposta

9

Non fare la classe interna con parametri:

class Baz<I extends Bar & Comparable<I>> { 
    class Foo { 
    } 
} 

Come una classe interna (non statica nidificato), I come definito nella dichiarazione Baz avrà ancora senso nella Foo, poiché ogni Foo avrà un riferimento implicito all'istanza esterna Baz.

+0

accetterò questo dato che risponde alla mia domanda. potrebbe sembrare una domanda banale ma il mio problema era diverso e l'ho scoperto in seguito. Il mio problema era che la classe interna era in realtà un'interfaccia interna. Non è possibile evitare di specificare esplicitamente i tipi nell'interfaccia interna e questo ha incasinato tutto per le classi interne che implementano le interfacce interne ... – marcorossi

3

Se I è già definito nella classe esterna solo fare questo

public class Outer<I extends Bar & Comparable<I>> { 
    public class Foo<I> { 
    } 
} 

È non può ridefinire I nella classe interna. Il I della classe interna sarebbe qualcosa di diverso dal I della classe esterna, se questo è quello che vuoi, beh, rinominalo.

HTH

Problemi correlati