Um tipo enum é um tipo de dados especial que permite que uma variável seja um conjunto de constantes predefinidas.
A variável tem de ser igual a um dos valores predefinidos para esse tipo.
Exemplos comuns incluem as direções da bússola (valores como NORTH, SOUTH, EAST e WEST) e os dias da semana.
Como são constantes, os nomes dos campos de um tipo enum escrevem-se em maiúsculas.
Na linguagem de programação Java, defines um tipo enum com a palavra-chave enum.
Por exemplo, um tipo enum com os dias da semana seria assim:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Deves usar tipos enum sempre que precisares de representar um conjunto fixo de constantes. Isso inclui tipos enum naturais, como os planetas do nosso sistema solar, e conjuntos de dados em que conheces todos os valores possíveis em tempo de compilação: por exemplo, as opções de um menu, as opções da linha de comandos, etc.
Este código mostra como usar o enum DayOfWeek definido acima:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
Os tipos enum da linguagem de programação Java são muito mais poderosos do que os equivalentes noutras linguagens.
A declaração enum define uma classe (a que se chama tipo enum).
O corpo da classe enum pode incluir métodos e outros campos:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
Chamar o método getNumberOfStars a um membro do tipo enum Rating:
Rating.GOOD.getNumberOfStars();
// => 4
O compilador acrescenta automaticamente alguns métodos especiais quando cria um enum.
Por exemplo, têm um método estático values que devolve um array com todos os valores do enum, pela ordem em que são declarados:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
O excerto acima imprime o seguinte:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
O compilador também acrescenta um método estático valueOf que devolve um membro do enum com base no seu nome:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY