2013-07-19 21 views
5

Ho provato questo:Come dichiarare una variabile che può contenere solo classi enumerate?

public static enum Types { A, B, C } 
Class<Enum> e = Types.class; 

ma ottengo un errore "tipi incompatibili":

found : java.lang.Class<id.Types> 
required: java.lang.Class<java.lang.Enum> 
    Class<Enum> e = Types.class; 

Per quanto ne so tutte le enumerazioni ereditano da Enum. Perché il mio enum è incompatibile con Enum?

risposta

10

Perché non solo Class<? extends Enum> e = Types.class;?

UPD: Ti darò una risposta più spiegata, perché il tuo codice non funziona.

Prima di tutto, il tipo di espressione Types.class è Class<Types>, e la variabile e è Class<Enum>.

Secondo JLS 5.5.1 tali tipi (cioè Class<Types> e Class<Enum>) sono tipi dimostrabilmente distinte (JLS 4.5), e le loro cancellature sono gli stessi (solo Class), quindi in questo caso è in fase di compilazione di errore quando si tenta di lanciare da Class<Types> a Class<Enum>.

+0

+1 Funziona davvero? Non è solo inventato? ;) –

+0

@PeterLawrey sì, funziona davvero :) – Andremoniy

+0

Grazie! Ma perché il mio enum no Enum? – ceving

Problemi correlati