Java - Devolver un array String pasando los valores enum

 
Vista:
sin imagen de perfil

Devolver un array String pasando los valores enum

Publicado por Xavi (21 intervenciones) el 12/11/2021 19:42:25
Hola,

Soy nuevo en Java y estoy empezando con los enum. Tengo el siguiente enum definido:

1
2
3
4
5
6
7
8
public enum Position {
 
    GOALKEEPER,
    DEFENDER,
    MIDFIELDER,
    FORWARD;
    // Variable local
    private String color;

Cada uno de estos valores corresponde a una posición de futbolista y cada una de estas posiciones tiene un color asignado. La asignación es la siguiente:

- GOALKEEPER --> BLACK
- DEFENDER --> RED
- MIDFIELDER --> GREEN
- FORWARD --> BLUE

Necesito crear un método llamado
1
getColors()

que devuelva un array de String con los calores de cada uno de los valores del enum. He creado el siguiente test para verificar la implementación del método:

1
assertEquals(Arrays.toString(new String[]{"BLACK, RED, GREEN, BLUE"}), Arrays.toString(Position.getColors()));

El problema es que como soy nuevo en Java y con los enum se me hace difícil pensar una posible solución a esto.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Devolver un array String pasando los valores enum

Publicado por Kabuto (1381 intervenciones) el 12/11/2021 21:27:20
Los Enum son muy similares a una clase cualquiera, por tanto tienen atributos, métodos e incluso un constructor, con la particularidad de que este es PRIVATE.

Quizás te pueda servir este ejemplo.

El enum tiene dos atributos, el color específico para un objeto Position, y otro es un array con todos los colores disponibles.
En el constructor del enum, a cada uno le pasamos un valor int para asignarle su color correspondiente, obteniéndolo del array.

Pongo dos métodos, uno retornar el color específico del enum que hayamos creado, el otro retorna todo el array de colores disponibles.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public enum Position {
 
        GOALKEEPER(0),//Por constructor le decimos a cada uno cuál es su color
        DEFENDER(1),
        MIDFIELDER(2),
        FORWARD(3);
 
        //Color específico de ESTE miembro del enum
        private String color;
 
        //Colores predefinidos para TODOS los miembros enum
        private String[] colores = new String[]{"BLACK", "RED", "GREEN", "BLUE"};
 
        //Constructor privado
        private Position(int numColor) {
            color = colores[numColor];
        }
 
        public String getColor() {
            return color;
        }
 
        public String[] getColors() {
            return colores;
        }
    }

Si lo probamos con este código de prueba:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.Arrays;
 
public class Main
{
    public static void main(String[] args) {
        //Creo un objeto Position
        Position defensor = Position.DEFENDER;
 
        //Muestro colores disponibles
        System.out.println("Colores disponibles: " + Arrays.toString(defensor.getColors()));
 
        //Y ahora muestro el color específico del objeto Position
        System.out.println("A " + defensor.toString() + " le corresponde el color " + defensor.getColor());
    }
}

Podemos ver que el objeto Position, puede proporcionarnos su color asignado, y también el array con todos los colores disponibles.
1
2
Colores disponibles: [BLACK, RED, GREEN, BLUE]
A DEFENDER le corresponde el color RED
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Devolver un array String pasando los valores enum

Publicado por Xavi (21 intervenciones) el 12/11/2021 21:36:55
Hola @Kabuto

Creo que estaba haciendo algo similar pero no consigo que me funcione. Había incializado directamente el enum con los colores pues así se me pide en el enunciado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public enum Position {
    GOALKEEPER("BLACK"),
    DEFENDER("RED"),
    MIDFIELDER("GREEN"),
    FORWARD("BLUE");
    // Variable local
    private String color;
 
    // Constructor que guarda el parámetro color
    private Position(String color){
        this.color=color;
 
    // Obtenemos el color
    public String getColor() {return color;}
 
    // Definición del método getColors()
    public static String [] getColors() {
        //TODO
        }
 
    }

Pero no sé como hacerlo. Podrias echarme una mano? Gracias de antemano!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Devolver un array String pasando los valores enum

Publicado por Xavi (21 intervenciones) el 12/11/2021 22:24:00
Ya lo hice de otra forma...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Arrays;
 
public enum Position {
 
    GOALKEEPER("BLACK"),
    DEFENDER("RED"),
    MIDFIELDER("GREEN"),
    FORWARD("BLUE");
    // Variable local
    private String color;
 
    // Constructor que guarda el paràmetre color
    private Position(String color){
        this.color=color;
    }
 
    // Obtenim el color
    public String getColor() {return color;}
 
 
    public static String [] getColors() {
        return Arrays.stream(Position.values()).map(Position::getColor).toArray(String[]::new);
    }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar