Fundamentos de Enumeração em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá sobre enums em Java. Enums são um tipo de dado especial em Java que nos permite definir um conjunto fixo de constantes. Você aprenderá como criar, usar e manipular enums em Java.

Criando um Enum

  1. Crie um novo arquivo com o nome StudentResult.java no diretório ~/project.
  2. Adicione o seguinte código para criar um enum chamado StudentResult:
public enum StudentResult {
    PASS,
    FAIL,
    ABSENT
}

Usando Enums

  1. Crie um novo arquivo com o nome Demo.java no diretório ~/project.
  2. Adicione o seguinte código para criar uma variável do tipo enum StudentResult e usar seus valores:
public class Demo {
    public static void main(String[] args) {
        StudentResult result1 = StudentResult.ABSENT;
        StudentResult result2 = StudentResult.FAIL;
        StudentResult result3 = StudentResult.PASS;

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}
  1. Execute o código usando o seguinte comando no terminal:
javac Demo.java && java Demo

Usando Enums com Declarações If-Else

  1. Adicione o seguinte código para usar o enum StudentResult com declarações if-else:
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        if(result == StudentResult.ABSENT)
            System.out.println("The student was absent for the exam.");

        else if(result == StudentResult.PASS)
            System.out.println("The student passed the exam.");

        else if(result == StudentResult.FAIL)
            System.out.println("The student failed the exam.");
    }
}

Usando Enums com Declarações Switch

  1. Adicione o seguinte código para usar o enum StudentResult com declarações switch:
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        switch(result) {
            case ABSENT : System.out.println("The Student was absent for the exam.");
            break;

            case PASS : System.out.println("The Student passed the exam.");
            break;

            case FAIL : System.out.println("The Student failed the exam.");
            break;
        }
    }
}

Iterando Sobre Enums

  1. Adicione o seguinte código para iterar sobre o enum StudentResult:
public class Demo {
    public static void main(String[] args) {
        StudentResult[] resultArr = StudentResult.values();

        for(StudentResult sr : resultArr) {
            System.out.println(sr + " at index " + sr.ordinal());
        }
    }
}

Usando o Método toString() de Enums

  1. Adicione o seguinte código para usar o método toString() de enums:
public class Demo {
    public static void main(String[] args) {
        for(StudentResult sr : StudentResult.values()) {
            String resultStr = sr.toString();
            System.out.println("Uppercase: " + resultStr);
            System.out.println("Lowercase: " + resultStr.toLowerCase());
            System.out.println();
        }
    }
}

Criando Enums a partir de Strings

  1. Adicione o seguinte código para criar enums a partir de strings:
public class Demo {
    public static void main(String[] args) {
        String resultStr = "FAIL";
        StudentResult result = StudentResult.valueOf(resultStr);
        System.out.print("Enum from String: " + result);
    }
}
  1. Execute o código usando o seguinte comando no terminal:
javac Demo.java && java Demo

Criando Enums Dentro de Classes

  1. Adicione o seguinte código para criar um enum dentro de uma classe e usá-lo:
public class Student {
    String name;
    StudentResult result;

    // Defining an enum type
    enum StudentResult {
        PASS,
        FAIL,
        ABSENT;
    }

    // Constructor
    Student(String s, StudentResult sr) {
        name = s;
        result = sr;
    }

    // Enum if-else method
    public void printResult() {
        if (this.result == StudentResult.ABSENT)
            System.out.println(this.name + " was absent for the exam.");

        else if (this.result == StudentResult.PASS)
            System.out.println(this.name + " passed the exam.");

        else
            System.out.println(this.name + " failed the exam.");
    }

    // Enum method
    public boolean wasAbsent() {
        if (this.result == StudentResult.ABSENT)
            return true;
        else
            return false;
    }

    // Main method
    public static void main(String[] args) {
        Student s1 = new Student("Justin", StudentResult.ABSENT);
        Student s2 = new Student("Jessica", StudentResult.PASS);

        s1.printResult();
        s2.printResult();

        System.out.println("Student s1 was absent: " + s1.wasAbsent());
    }
}
  1. Execute o código usando o seguinte comando no terminal:
javac Student.java && javac Demo.java && java Student

Usando EnumSet

  1. Adicione o seguinte código para usar EnumSet:
import java.util.EnumSet;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumSet<StudentResult> resultSet1 = EnumSet.of(StudentResult.FAIL, StudentResult.PASS);
        EnumSet<StudentResult> resultSet2 = EnumSet.allOf(StudentResult.class);

        System.out.println("Enum Set-1: " + resultSet1);
        System.out.print("Enum Set-2: " + resultSet2);
    }
}

Usando EnumMaps

  1. Adicione o seguinte código para usar EnumMaps:
import java.util.EnumMap;
import java.util.Map;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumMap<StudentResult, String> resultMap = new EnumMap<>(StudentResult.class);
        resultMap.put(StudentResult.PASS, "Student Passed the exam");
        resultMap.put(StudentResult.FAIL, "Student Failed the exam");
        resultMap.put(StudentResult.ABSENT, "Student was absent for the exam");

        for (Map.Entry<StudentResult, String> e : resultMap.entrySet())
            System.out.println(e.getKey() + " --> " + e.getValue());
    }
}

Resumo

Neste laboratório, você aprendeu como criar um enum, usá-lo com as instruções if-else e switch, iterar sobre um enum, usar seu método toString(), criar enums a partir de strings, criar um enum dentro de uma classe, usar EnumSet para armazenar eficientemente constantes de enum, usar EnumMaps para armazenar pares chave-valor de enums e usar métodos concretos e abstratos em enums. Você também aprendeu que enums são usados para definir uma coleção de valores constantes e que eles aumentam a segurança de tipos em Java.