Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Pedro122h en 13 Mayo 2022, 07:36 am



Título: que es exactamente la clase enum?
Publicado por: Pedro122h en 13 Mayo 2022, 07:36 am
me eh quedado muy confundido cuando empecé a ver este clase.
no entiendo porque el constructor se tiene que declarar como privado?
y supuestamente no se pueden crear instancias de esta clase pero entonces porque se puede hacer esto:
Código
  1.  
  2. enum talla{MINI,MEDIANO,GRANDE};
  3. public class prueba{
  4.  
  5. public static void Main(String[] args){
  6. talla s=talla.MINI;
  7. talla m=talla.MEDIANO;
  8. talla l=talla.GRANDE;
  9. }
  10.  
  11. }
  12.  
y porque cuando se llama un método estático de esta clase se escribe "Enum" en lugar de "enum"
Código
  1. talla la_talla=Enum.valueOf(talla.class,"s");
  2.  


Título: Re: que es exactamente la clase enum?
Publicado por: rub'n en 13 Mayo 2022, 12:28 pm
no entiendo porque el constructor se tiene que declarar como privado?
 - Ya es private por defecto, no hace falta que se lo escribas, es redundante si lo haces.
y supuestamente no se pueden crear instancias de esta clase pero entonces porque se puede hacer esto:
- No se pueden instanciar, solo reusas las contantes internas, ni extender tampoco, porque los enums son inmutables.
y porque cuando se llama un método estático de esta clase se escribe "Enum" en lugar de "enum"
- Es una manera de hacerlo, de varias de hacerlo.

Ejemplo

Código
  1.    enum Talla {
  2.        MINI("s"),
  3.        MEDIANO("m"),
  4.        GRANDE("g"),
  5.  
  6.        DEFAULT("no-existe");
  7.  
  8.        private String talla;
  9.  
  10.        // ya es private por defecto
  11.        Talla(final String talla) {
  12.            this.talla = talla;
  13.        }
  14.  
  15.        public String getTalla() {
  16.            return talla;
  17.        }
  18.  
  19.        public static Talla getTallaByType(final String talla) {
  20.            return EnumSet.allOf(Talla.class)
  21.                    .stream()
  22.                    .filter(enumTalla -> enumTalla.getTalla().equals(talla))
  23.                    .findFirst()
  24.                    .orElse(DEFAULT);
  25.        }
  26.  
  27.        public static Talla getTallaByType2(final String talla) {
  28.            return Arrays.stream(Talla.values())
  29.                    .filter(enumTalla -> enumTalla.getTalla().equals(talla))
  30.                    .findFirst()
  31.                    .orElse(DEFAULT);
  32.        }
  33.  
  34.        public static String getTallaByType3(final String talla) {
  35.            String returnTalla = "";
  36.            for(Talla temp : Talla.values()) {
  37.                if(temp.getTalla().equals(talla)) {
  38.                    returnTalla = temp.getTalla();
  39.                    break;
  40.                }
  41.            }
  42.            return returnTalla;
  43.        }
  44.  
  45.    }
  46.  
  47.    @Test
  48.    void prueba1() {
  49.        Talla s = Talla.MINI;
  50.        Talla m = Talla.MEDIANO;
  51.        Talla l = Talla.GRANDE;
  52.    }
  53.  
  54.    @Test
  55.    void prueba2() {
  56.        String talla = Talla.MINI.getTalla();
  57.        System.out.println("Es talla mini -> " + talla);
  58.    }
  59.  
  60.  
  61.    @Test
  62.    void prueba3() {
  63.        final Talla tallaS = Talla.getTallaByType("s");
  64.        if(tallaS == Talla.MINI) {
  65.            System.out.println("Es talla mini");
  66.        } else {
  67.            System.out.println("No es talla mini");
  68.        }
  69.    }
  70.  
  71.    @Test
  72.    void prueba4() {
  73.        final String tallaS = Talla.getTallaByType3("s");
  74.        if(tallaS.equals(Talla.MINI.getTalla())) {
  75.            System.out.println("Es talla mini");
  76.        } else {
  77.            System.out.println("No es talla mini");
  78.        }
  79.    }
  80.  
  81.    @Test
  82.    void prueba5() {
  83.        //Java 8
  84.        Arrays.stream(Talla.values())
  85.                .forEach(talla -> System.out.println("Talla " + talla.getTalla()));
  86.  
  87.        //Java 7 +o-
  88.        for(Talla talla : Talla.values()) {
  89.            System.out.println(talla.getTalla());
  90.        }
  91.  
  92.    }



Aqui en constantes, estas no puedes cambiarlas asi nomas, a menos que hagas Reflection.

Código
  1.    private static final String MINI = "s";
  2.    private static final String MEDIANO = "m";
  3.    private static final String GRANDE = "g";

Las constantes tambien se usan para no estar repitiendo en el codigo el mismo String, y asi pasas el control de calidad en pipelines, que tengan reglas de Sonar, mas precisamente "Sonar Qube", este tiene una regla que si repites un String 3 veces, ya tienes un "mayor issue"

Código
  1.  
  2. @Test
  3. @DisplayName("Esto no pasa control de calidad, El String Java se repirta 4 veces.")
  4. void noMeRepitasPerro() {
  5.        System.out.println("Java" + " Es mierd*");
  6.        System.out.println("Java" + " Es una p**a mierd*");
  7.        System.out.println("Java" + " Es una rep*tis*ma mierd*");
  8.        System.out.println("Java" + " Es es peor que python");
  9.    }

Código
  1.  
  2. @Test
  3. @DisplayName("NO SONAR")
  4.    void noMeRepitasLoco2() {
  5.        String java = "Java";
  6.        System.out.println(java + " Es mierd*");
  7.        System.out.println(java + " Es una p**a mierd*");
  8.        System.out.println(java + " Es una rep*tis*ma mierd*");
  9.        System.out.println(java + " Es es peor que python");
  10.    }


Título: Re: que es exactamente la clase enum?
Publicado por: Pedro122h en 15 Mayo 2022, 21:19 pm
gracias,aunque porque tanto odio a java  :laugh: :laugh: :laugh: