Enum só default e public?

11 respostas
J

Olá pessoal

Estive lendo o guia para certificação da kathy e lá me deparei com uma afirmação:

Enums só podem ser default ou public.

Tudo bem, se estiver fora da classe sim, só podem ser default e public, mas … se estiver dentro da classe pode ter qulquer modificador de acesso:

public class TesteEnum {

	Cor cor = Cor.azul;
	
	protected enum Cor{azul,verde,amarelo}
	
}

class TentaEnum{
	
	TesteEnum.Cor cor = TesteEnum.Cor.amarelo;
	
}

o código acima compila normalmente, observe que o enum ai foi declarado com o modificador protected.

Minha afirmação tá certa ou eu to viajando? Tem alguma coisa que eu não to conseguindo enxergar? ou é iso mesmo?

VALEW

11 Respostas

Rafael_Nunes

Pense numa enum como uma classe. Ela vai obedecer os mesmo modificadores de acesso.

Se for uma classe separada, só pode ser public ou default/package.
Se for o membro interno de uma outra classe, pode ter qualquer modificador de acesso. Pois vai funcionar como um membro desta classe(como uma classe interna).

LPJava

dentro da classe enum é um membro da classe entao um membro vc pode usar todos os modifiadores e fora da classe enum é um tipo de class especial… entao vc nao declara uma class asism:

private class Java{
 
}

Não existe isso acima … ou é public ou é default… mesma regra se aplica a enum, ja que ela é um tipo especial de class.

J

opa

entendi

Brigadão gente XD

victorwss

Rafael Nunes:
Pense numa enum como uma classe. Ela vai obedecer os mesmo modificadores de acesso.

Se for uma classe separada, só pode ser public ou default/package.
Se for o membro interno de uma outra classe, pode ter qualquer modificador de acesso. Pois vai funcionar como um membro desta classe(como uma classe interna).

Quase. Na verdade há um detalhezinho que faz diferença: Classes locais a métodos:

public void metodo() {
    // compila ok.
    class X {
        private int y;
    }

    // NÃO COMPILA!!!!
    enum Z {
        A, B, C;
        private int y;
    }
}

[size=18]Pegadinha FDP:
[color=red]VOCÊ NÃO PODE TER ENUMS LOCAIS A MÉTODOS[/color][/size]

J

AH tah … mas q não pode colocar uma Enum dentro de um método eu sabia XD

victorwss

Ainda bem. Mas é só para ressaltar que as regras não são as mesmas e sim são QUASE as mesmas. E essa merda de pegadinha cai na prova!

J

Valew cara XD

LPJava

Ainda bem. Mas é só para ressaltar que as regras não são as mesmas e sim são QUASE as mesmas. E essa merda de pegadinha cai na prova!

concerteza cai, brincando essas pegadinhas… ehhe… lembrar as regras e saber o por uqe é o essencial…

Paulo_Silveira

alem disso, nao existe enum inner no sentido real da palavra: toda enum aninhada é estatica, nao tem como fugir disso.

victorwss

Tem razão, tem mais essa regra exotérica. Se o enum é uma classe interna, ele tem o static implícito.

LPJava

bem lembrado!!! 8)

Criado 5 de maio de 2008
Ultima resposta 5 de mai. de 2008
Respostas 11
Participantes 5