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 enum Talla {
MINI("s"),
MEDIANO("m"),
GRANDE("g"),
DEFAULT("no-existe");
// ya es private por defecto
this.talla = talla;
}
return talla;
}
public static Talla getTallaByType
(final String talla
) { return EnumSet.allOf(Talla.class)
.stream()
.filter(enumTalla -> enumTalla.getTalla().equals(talla))
.findFirst()
.orElse(DEFAULT);
}
public static Talla getTallaByType2
(final String talla
) { return Arrays.
stream(Talla.
values()) .filter(enumTalla -> enumTalla.getTalla().equals(talla))
.findFirst()
.orElse(DEFAULT);
}
for(Talla temp : Talla.values()) {
if(temp.getTalla().equals(talla)) {
returnTalla = temp.getTalla();
break;
}
}
return returnTalla;
}
}
@Test
void prueba1() {
Talla s = Talla.MINI;
Talla m = Talla.MEDIANO;
Talla l = Talla.GRANDE;
}
@Test
void prueba2() {
String talla
= Talla.
MINI.
getTalla(); System.
out.
println("Es talla mini -> " + talla
); }
@Test
void prueba3() {
final Talla tallaS = Talla.getTallaByType("s");
if(tallaS == Talla.MINI) {
System.
out.
println("Es talla mini"); } else {
System.
out.
println("No es talla mini"); }
}
@Test
void prueba4() {
final String tallaS
= Talla.
getTallaByType3("s"); if(tallaS.equals(Talla.MINI.getTalla())) {
System.
out.
println("Es talla mini"); } else {
System.
out.
println("No es talla mini"); }
}
@Test
void prueba5() {
//Java 8
.
forEach(talla
-> System.
out.
println("Talla " + talla.
getTalla()));
//Java 7 +o-
for(Talla talla : Talla.values()) {
System.
out.
println(talla.
getTalla()); }
}
Aqui en constantes, estas no puedes cambiarlas asi nomas, a menos que hagas Reflection.
private static final String MINI
= "s"; private static final String MEDIANO
= "m"; 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"
@Test
@DisplayName("Esto no pasa control de calidad, El String Java se repirta 4 veces.")
void noMeRepitasPerro() {
System.
out.
println("Java" + " Es mierd*"); System.
out.
println("Java" + " Es una p**a mierd*"); System.
out.
println("Java" + " Es una rep*tis*ma mierd*"); System.
out.
println("Java" + " Es es peor que python"); }
@Test
@DisplayName("NO SONAR")
void noMeRepitasLoco2() {
System.
out.
println(java
+ " Es mierd*"); System.
out.
println(java
+ " Es una p**a mierd*"); System.
out.
println(java
+ " Es una rep*tis*ma mierd*"); System.
out.
println(java
+ " Es es peor que python"); }