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 ela.
Exemplos comuns incluem os pontos cardeais (valores 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 letras maiúsculas.
Na linguagem de programação Java, defines um tipo enum com a palavra-chave enum.
Por exemplo, um tipo enum para os dias da semana especifica-se 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 cujos valores possíveis conheces todos em tempo de compilação: por exemplo, as opções de um menu, as opções de linha de comandos, e assim por diante.
Aqui está algum código que te 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 seus equivalentes noutras linguagens.
A declaração enum define uma classe (chamada 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 num membro do tipo enum Rating:
Rating.GOOD.getNumberOfStars();
// => 4
Neste exercício vais processar linhas de log.
Cada linha de log é uma string com o seguinte formato: "[<LVL>]: <MESSAGE>".
Estes são os diferentes níveis de log:
TRC (trace)DBG (debug)INF (info)WRN (warning)ERR (error)FTL (fatal)Tens três tarefas.
Define uma enumeração LogLevel com seis elementos correspondentes aos níveis de log acima.
TRACEDEBUGINFOWARNINGERRORFATALDe seguida, implementa o método LogLine.getLogLevel(), que devolve o nível de log analisado de uma linha de log:
var logLine = new LogLine("[INF]: File deleted");
logLine.getLogLevel();
// => LogLevel.INFO
Infelizmente, por vezes algumas linhas de log têm um nível de log desconhecido.
Para tratar estas linhas de log de forma elegante, adiciona um elemento UNKNOWN à enumeração LogLevel, que deve ser devolvido ao analisar um nível de log desconhecido:
var logLine = new LogLine("[XYZ]: Overly specific, out of context message");
logLine.getLogLevel();
// => LogLevel.UNKNOWN
O nível de log de uma linha de log é bastante extenso.
Para reduzir o espaço em disco necessário para armazenar as linhas de log, foi criado um formato curto: "[<ENCODED_LEVEL>]:<MESSAGE>".
O nível de log codificado é um mapeamento simples de um nível de log para um número:
UNKNOWN - 0
TRACE - 1
DEBUG - 2
INFO - 4
WARNING - 5
ERROR - 6
FATAL - 42
Implementa o método LogLine.getOutputForShortLog(), que consegue produzir o formato curto da linha de log:
var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.