elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  que es exactamente la clase enum?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: que es exactamente la clase enum?  (Leído 2,153 veces)
Pedro122h

Desconectado Desconectado

Mensajes: 159


Ver Perfil
que es exactamente la clase enum?
« 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.  


En línea

rub'n


Desconectado Desconectado

Mensajes: 1.217


(e -> λ("live now")); tatuar -> λ("α");


Ver Perfil WWW
Re: que es exactamente la clase enum?
« Respuesta #1 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.    }


« Última modificación: 15 Mayo 2022, 21:22 pm por rub'n » En línea



rubn0x52.com KNOWLEDGE  SHOULD BE FREE.
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen ki
Pedro122h

Desconectado Desconectado

Mensajes: 159


Ver Perfil
Re: que es exactamente la clase enum?
« Respuesta #2 en: 15 Mayo 2022, 21:19 pm »

gracias,aunque porque tanto odio a java  :laugh: :laugh: :laugh:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda con Enum
Programación Visual Basic
SheKeL_C$ 1 1,971 Último mensaje 19 Diciembre 2008, 01:10 am
por seba123neo
[error] costantes enum en c++
Programación C/C++
dani__ 7 5,595 Último mensaje 22 Junio 2010, 14:25 pm
por [L]ord [R]NA
No me deja asignar un valor a un tipo enum de una clase
.NET (C#, VB.NET, ASP)
d00ze13 3 3,109 Último mensaje 21 Diciembre 2011, 16:19 pm
por Novlucker
Enum
Programación C/C++
angeljonh 3 2,270 Último mensaje 21 Agosto 2017, 20:10 pm
por angeljonh
[C++] Qué son las estructuras union y enum?
Programación C/C++
huchoko 5 2,243 Último mensaje 11 Noviembre 2018, 00:40 am
por elgilun
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines