Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende enum | enum y API de Stream
Estructuras de Datos en Java

bookenum

Pasemos a otra estructura de datos bastante interesante y, sobre todo, distintiva: enum.

Nota

Por si lo has olvidado, una constante es un valor inmutable. Permanece constante.

Echemos un vistazo a la creación de un enum. Crear un enum difiere significativamente de otras estructuras de datos, ya que se hace a nivel de clase:

DaysOfTheWeek.java

DaysOfTheWeek.java

copy
123456789
public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

Enum es necesario para que podamos fácilmente referirnos a la constante. Como es una lista de constantes, accedemos a ella de la siguiente manera:

main.java

main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

Aquí, simplemente accedemos a la constante enum para saber qué día es hoy. En lugar de crear muchas constantes diferentes, simplemente almacenamos un array de constantes en el enum. Esto es cómodo y muy práctico. Por ejemplo, en uno de los retos anteriores, podríamos haber almacenado nombres de departamentos en un enum y utilizar la constante como clave.

Veamos un ejemplo:

main.java

main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }

Por cierto, también podemos recuperar todos los valores constantes de un enum como un array usando el método values().

Veamos un ejemplo:

main.java

main.java

copy
12345678910111213
package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

También podemos declarar campos y métodos en enums.

Consideremos el ejemplo de un semáforo:

main.java

main.java

copy
12345678910111213
enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }

En los enums, los métodos funcionan de forma ligeramente diferente. Al ser constantes, no pueden ser modificados. Por lo tanto, añadimos campos en el constructor de este enum, después de lo cual definimos el método getAction() que inmediatamente emite la acción a tomar para un semáforo específico. Como puedes ver, especificamos esta acción directamente en el enum al enumerar las constantes.

Veamos un ejemplo de llamada a un método de este tipo:

main.java

main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }

Como puedes ver, con la ayuda del método getAction(), hemos obtenido inmediatamente la acción a tomar para un semáforo específico. Puedes cambiar el color ROJO por cualquier otro color y ver qué ocurre.

Los métodos y campos en enums no se utilizan tan a menudo, pero esta funcionalidad está presente, por lo que es bueno ser consciente de ello. Puedes leer más sobre los enums en la Documentación oficial de Java.

Resumamos un poco:

Ventajas de Enum en Java:

  1. Mejora la legibilidad: La sustitución de constantes numéricas y literales de cadena por valores con nombre hace que el código sea más legible.
  2. Seguridad de tipos: El compilador garantiza la seguridad de tipos al trabajar con enums, evitando errores relacionados con tipos.
  3. Conjunto limitado de valores: Los enums proporcionan un conjunto fijo de valores, haciendo el código más predecible.
  4. Posibilidad de añadir métodos y campos: Los Enums pueden contener métodos y campos, lo que los hace más potentes en comparación con las enumeraciones simples.

1. ¿Qué es un enum en Java?

2. ¿Cómo se declara un enum llamado Months que representa los meses del año?

3. ¿Cómo se puede obtener un array con todos los valores de un enum llamado Colors?

4. ¿Cuál de las siguientes afirmaciones sobre el siguiente enum es cierta?

5. ¿Cómo compararías correctamente currentStatus con Status.ACTIVE? Considere el siguiente enum:

question mark

¿Qué es un enum en Java?

Select the correct answer

question mark

¿Cómo se declara un enum llamado Months que representa los meses del año?

Select the correct answer

question mark

¿Cómo se puede obtener un array con todos los valores de un enum llamado Colors?

Select the correct answer

question mark

¿Cuál de las siguientes afirmaciones sobre el siguiente enum es cierta?

Select the correct answer

question mark

¿Cómo compararías correctamente currentStatus con Status.ACTIVE? Considere el siguiente enum:

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4

bookenum

Desliza para mostrar el menú

Pasemos a otra estructura de datos bastante interesante y, sobre todo, distintiva: enum.

Nota

Por si lo has olvidado, una constante es un valor inmutable. Permanece constante.

Echemos un vistazo a la creación de un enum. Crear un enum difiere significativamente de otras estructuras de datos, ya que se hace a nivel de clase:

DaysOfTheWeek.java

DaysOfTheWeek.java

copy
123456789
public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

Enum es necesario para que podamos fácilmente referirnos a la constante. Como es una lista de constantes, accedemos a ella de la siguiente manera:

main.java

main.java

copy
123456789101112131415161718
package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }

Aquí, simplemente accedemos a la constante enum para saber qué día es hoy. En lugar de crear muchas constantes diferentes, simplemente almacenamos un array de constantes en el enum. Esto es cómodo y muy práctico. Por ejemplo, en uno de los retos anteriores, podríamos haber almacenado nombres de departamentos en un enum y utilizar la constante como clave.

Veamos un ejemplo:

main.java

main.java

copy
12345678910111213141516171819202122232425262728293031323334353637
package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }

Por cierto, también podemos recuperar todos los valores constantes de un enum como un array usando el método values().

Veamos un ejemplo:

main.java

main.java

copy
12345678910111213
package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }

También podemos declarar campos y métodos en enums.

Consideremos el ejemplo de un semáforo:

main.java

main.java

copy
12345678910111213
enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }

En los enums, los métodos funcionan de forma ligeramente diferente. Al ser constantes, no pueden ser modificados. Por lo tanto, añadimos campos en el constructor de este enum, después de lo cual definimos el método getAction() que inmediatamente emite la acción a tomar para un semáforo específico. Como puedes ver, especificamos esta acción directamente en el enum al enumerar las constantes.

Veamos un ejemplo de llamada a un método de este tipo:

main.java

main.java

copy
1234567891011121314151617181920212223
package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }

Como puedes ver, con la ayuda del método getAction(), hemos obtenido inmediatamente la acción a tomar para un semáforo específico. Puedes cambiar el color ROJO por cualquier otro color y ver qué ocurre.

Los métodos y campos en enums no se utilizan tan a menudo, pero esta funcionalidad está presente, por lo que es bueno ser consciente de ello. Puedes leer más sobre los enums en la Documentación oficial de Java.

Resumamos un poco:

Ventajas de Enum en Java:

  1. Mejora la legibilidad: La sustitución de constantes numéricas y literales de cadena por valores con nombre hace que el código sea más legible.
  2. Seguridad de tipos: El compilador garantiza la seguridad de tipos al trabajar con enums, evitando errores relacionados con tipos.
  3. Conjunto limitado de valores: Los enums proporcionan un conjunto fijo de valores, haciendo el código más predecible.
  4. Posibilidad de añadir métodos y campos: Los Enums pueden contener métodos y campos, lo que los hace más potentes en comparación con las enumeraciones simples.

1. ¿Qué es un enum en Java?

2. ¿Cómo se declara un enum llamado Months que representa los meses del año?

3. ¿Cómo se puede obtener un array con todos los valores de un enum llamado Colors?

4. ¿Cuál de las siguientes afirmaciones sobre el siguiente enum es cierta?

5. ¿Cómo compararías correctamente currentStatus con Status.ACTIVE? Considere el siguiente enum:

question mark

¿Qué es un enum en Java?

Select the correct answer

question mark

¿Cómo se declara un enum llamado Months que representa los meses del año?

Select the correct answer

question mark

¿Cómo se puede obtener un array con todos los valores de un enum llamado Colors?

Select the correct answer

question mark

¿Cuál de las siguientes afirmaciones sobre el siguiente enum es cierta?

Select the correct answer

question mark

¿Cómo compararías correctamente currentStatus con Status.ACTIVE? Considere el siguiente enum:

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 1
some-alt