Funções Java: Explorando o Poder dos Enums em Java
- #Java
Enum é um tipo de dado constante que oferece uma abordagem orientada a objetos para agrupar uma lista de constantes que estão relacionadas em um mesmo contexto no sistema. Enums foram introduzidos na versão 5 da linguagem Java, para utilização dessa funcionalidade é necessário utilizar a palavra reservada enum.
O Java é uma linguagem de programação Orientada a Objetos, ao definirmos um enum em nosso programa, estamos implicitamente utilizando o conceito de Herança. Portanto, toda enum estende a classe Enum que está no pacote java.lang.Enum. É importante perceber que um enum não pode estender nenhuma outra classe, pois em Java não é suportado a Herança Múltipla.
Em Java, a declaração de um enum é bastante simples e semelhante a declaração de uma class. No corpo do enum, podemos listar os campos e separalos por vírgula e o último campo finaliza com ponto e vírgula. Em uma enum também é possível incluir métodos se necessário. Uma prática recomendada é escrever os campos em letras maúscula, assim respeitando o padrão definido pelo Java para constantes.
public enum PaymentStatus {
PENDING,
PAID,
FAILED;
}
Também podemos definir parâmetros ao declarar uma enum, proporcionando mais flexibilidade na utilização. Para isso, precisamos criar um construtor privado que recebe a quantidade de parâmetros declarados na enum, e precisamos adicionar um atributo para cada parâmetro criado.
public enum NFeStatus {
AUTORIZADA("100"),
CANCELADA("003");
private final String codigo;
NFeStatus(final String codigo) {
this.codigo = codigo;
}
public String getCodigo() {
return this.codigo;
}
}
Ao utilizar enums, podemos criar classes que se beneficiam dessa abstração. Por exemplo, consideremos a classe Order, que possui um atributo status do tipo enum PaymentStatus e um método process() que contém a lógica de negócio para processar ou não o pedido. No código de exemplo, é criada uma lista com as definições dos enums do tipo PaymentStatus. Em seguida, é mostrado como iterar sobre a lista e exibir o nome do campo no terminal. Por fim, é utilizado o método process() do objeto Order e verifica-se se o status do pedido é igual ao valor PaymentStatus.PAID. Assim, é possível determinar se o pedido foi processado com sucesso ou não, exibindo mensagens apropriadas no terminal.
public class PaymenyService {
public static class Order {
private PaymentStatus status;
public Order() {
this.status = PaymentStatus.PENDING;
}
public void process() {
if (this.status.equals(PaymentStatus.FAILED))
throw new RuntimeException("order failed, unable to process");
this.status = PaymentStatus.PAID;
}
public PaymentStatus getStatus() {
return status;
}
}
public static void main(String[] args) {
final Order newOrder = new Order();
final List<PaymentStatus> paymentsStatus = List.of(
PaymentStatus.PENDING,
PaymentStatus.PAID,
PaymentStatus.FAILED
);
for (final PaymentStatus paymentStatus : paymentsStatus) {
System.out.println("Possíveis status de pagamento: " + paymentStatus.name());
}
newOrder.process();
if (newOrder.status.equals(paymentsStatus.PAID))
System.out.println("Order " + newOrder.getStatus());
else
System.out.println("Order " + newOrder.getStatus());
}
}
Essa abordagem com enums no Java proporciona uma maneira clara e eficiente de lidar com constantes agrupadas, tornando o desenvolvimento de sistemas mais organizado e legível.
Referência