Pelo que eu lembre, enums são classes que obrigatoriamente extendem a classe Enum… só isso!
Não Você pode ter quantas classes/enums você quiser dentro de um mesmo fonte… claro que é uma boa prática separar cada um em um arquivo, por questões de legibilidade, ou você acaba com algo como…:
public class EnumTest {
public enum MyEnum{
ONE,
TWO,
THREE;
}
public enum MyEnum2 {
FOUR,
FIVE,
SIX;
}
private int atrib;
public EnumTest(){
this.atrib++;
}
public class EnumTest2 {
// ...
}
public class EnumTest3 {
// ...
}
}
E o main, repare que maneira ‘bonita’ de instanciar os objetos:
Pelo que sei, depende de como você efetuar a declaraçao do enum.
Se você efetuá-la dentro da classe (como nos exemplos do MarceloS), o enum pode ser público e estar dentro de outra classe (como uma classe interna).
Porém se você declarar o enum fora da classe, ele vai precisar de um arquivo específico para ele. Como nos exemplos:
// Exemplo de declaração VÁLIDA de enum público
public class Enums {
public enum kindSize {
SMALL(1, "Small"), MEDIUM(2, "Medium"), BIG(3, "Big"), OTHER(0, null);
int size = 0;
private String text;
boolean isTextNull() {
return text == null;
}
String getText() {
return text;
}
kindSize(int i, String txt) {
size = i;
text = txt;
}
}
}
// Exemplo de dclaração INVÁLIDA de enum público
public enum kindSize {
SMALL(1, "Small"), MEDIUM(2, "Medium"), BIG(3, "Big"), OTHER(0, null);
int size = 0;
private String text;
boolean isTextNull() {
return text == null;
}
String getText() {
return text;
}
kindSize(int i, String txt) {
size = i;
text = txt;
}
}
public class Enums {
}
ai eu troquei o nome do enum para X e o da classe para teste… a classe tirei o public e coloquei no enum o public… (comentei o construtor tb) veja só o q q eu consegui…
Em meio a véspera de Natal, estou estudando para a SCJP por meio do livro da Kathy Sierra…
E surgiu uma dúvida sobre enums…
Eles são tratados muito parecidos com classes, “parecidos”…
O nome de um arquivo - fonte deve ser o mesmo de uma classe Pública, se houver uma classe pública…
Mas, se tivermos no mesmo arquivo-fonte um enum público ? o Arquivo - fonte tb deve ter o mesmo nome deste enum?
[/quote]
O que a Kate quer dizer é que se existe um TIPO publico no arquivo o nome do arquivo tem que ser igual ao desse tipo.
TIPO pode ser classe, interface, enum ou anotação.
É possivel ter mais de um tipo publico no arquivo, desde que todas além da primeira esteja definidas dentro da primeira.
Assim
[code]
public class ClassPublica {
public interface InterfacePublica {
}
public enum EnumPublico {
}
}[/code]
o problema é que para definir uma variável com o tipo interno vc tem que usar sempre o externo
Por exemplo
[code]
public class OutraClasseEmAlgumLugar implements ClassPublica.InterfacePublica {
}[/code]
Agora, ter mais do que um tipo publico no mesmo arquivo pode ser interessante em casos especiais ( veja Map.Entry no java padrão como exemplo) mas não é muito comum porque singifica que as classes têm alguma relação especial. Essa relação é rara.
Normalmente quando vc pensa em fazer isso vc não precisa realmente e pode criar dois arquivos separados para cada um.
isso é uma boa dúvida, enum não é somente para trabalhar com tipos ou algo do tipo:? por exemplo: na minha classe enum eu coloco os estados do brasil, ou os tipos de logradouro, etc
seria isso?