Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
¿Cómo llamar a getSeason(Months.OCTOBER)?

Mi pregunta está relacionada con enum s y switch expressions .

Tengo dificultades al intentar llamar al método usando getSeason(Months.OCTOBER) .

¿Cómo puedo llamar a este método en el método principal para imprimir “SPRING” ? No creo que el problema esté en el método Season, sino en el método main() .

Código:

 public class Seasons { private static Seasons season; enum Seasons {SPRING, SUMMER, WINTER, AUTUMN}; enum Months { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER}; public static Seasons getSeason(Months month) { Seasons season = null; switch (month) { case SEPTEMBER: case OCTOBER: case NOVEMBER: season = Seasons.SPRING; break; case DECEMBER: case JANUARY: case FEBRUARY: season = Seasons.WINTER; break; case JUNE: case JULY: case AUGUST: season = Seasons.SUMMER; break; case MARCH: case APRIL: case MAY: season = Seasons.AUTUMN; break; } return season; } public static void main(String[] args) { getSeason(Months.OCTOBER); //How can I print “SPRING” ? } }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La respuesta de Alexander Ivanchenko es correcta. Agregaré un poco sobre nombres y algunos consejos.

Ya tenemos la enumeración java.time.Month . No hay necesidad de reinventar.

En general, una enumeración debe nombrarse en singular. Por ejemplo, java.time.Month y java.time.DayOfWeek . Entonces, Season en lugar de Seasons .

Las clases java.time ( JSR 310 ) establecieron algunas convenciones de nomenclatura que han demostrado ser sensatas y prácticas. Para pasar de lo más específico a lo más general, lo que significa que estamos perdiendo información, use from . Por ejemplo, java.time.YearMonth ofrece un método de fábrica estático from para producir un valor de año-mes a partir de un objeto de fecha, etc. Por lo tanto, Season#from( java.time.Month ) .

Y considere agregar un método para producir un nombre para mostrar, en lugar del nombre en mayúsculas del objeto de enumeración. Para un pequeño proyecto específico, codifique el resultado de dicho método, para un lenguaje específico. Si reutiliza esta clase, considere agregar localización a través de un argumento Locale pasado como se ve en las clases java.time . Por ejemplo, java.time.Month#getDisplayName( TextStyle , Locale ) .

 enum Season { SPRING ( "Spring" ), SUMMER ( "Summer" ), WINTER ( "Winter" ), AUTUMN ( "Autumn" ); private String displayName ; Season ( String displayName ) { this.displayName = displayName ; } public String getDisplayName() { return this.displayName ; } public Season from( java.time.Month month ) { Objects.requireNonNull( month ) ; return switch ( month ) { case SEPTEMBER, OCTOBER, NOVEMBER -> Season.SPRING; case DECEMBER, JANUARY, FEBRUARY -> Season.WINTER; case JUNE, JULY, AUGUST -> Season.SUMMER; case MARCH, APRIL, MAY -> Season.AUTUMN; }; } }

Uso:

 System.out.println( Season.from( Month.JANUARY ) ) ; System.out.println( Season.from( Month.JANUARY ).getDisplayName() ) ;

INVIERNO

Invierno

Por cierto, un consejo: ahora se puede definir una enumeración localmente, en Java 16 y versiones posteriores. Esto vino del trabajo en registros .

over 4 years ago · Santiago Trujillo Denunciar

0

El método getSeason() hace su trabajo correctamente, la razón por la que no ve nada en la consola es que se ignora el resultado de la llamada al método.

Simplemente haz esto:

 System.out.println(getSeason(Months.OCTOBER));

Por cierto, si está utilizando Java 14 + , su método getSeason() podría implementarse de manera más concisa.

 public static Seasons getSeason(Months month) { return switch (month) { case SEPTEMBER, OCTOBER, NOVEMBER -> Seasons.SPRING; case DECEMBER, JANUARY, FEBRUARY -> Seasons.WINTER; case JUNE, JULY, AUGUST -> Seasons.SUMMER; case MARCH, APRIL, MAY -> Seasons.AUTUMN; }; }
over 4 years ago · Santiago Trujillo Denunciar

0

Este...

 public class Seasons { enum Seasons {SPRING, SUMMER, WINTER, AUTUMN};

me está dando un sinfín de problemas, al compilador no parece gustarle el hecho de que hayas vuelto a declarar Seasons

También parece estar perdiendo la oportunidad de encapsular algunas de las funciones, por ejemplo, ¿no sería más fácil si pudiera preguntar directamente al MONTH qué estación representa?

Entonces, comencé cambiando el nombre de sus enum para que sean plurales y luego agregué compatibilidad con la enum Month para obtener la Season actual.

 public class Seasons { enum Season { SPRING, SUMMER, WINTER, AUTUMN }; enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER; public Season getSeason() { switch (this) { case SEPTEMBER: case OCTOBER: case NOVEMBER: return Season.SPRING; case DECEMBER: case JANUARY: case FEBRUARY: return Season.WINTER; case JUNE: case JULY: case AUGUST: return Season.SUMMER; case MARCH: case APRIL: case MAY: return Season.AUTUMN; } return null; } }; public static void main(String[] args) { System.out.println(Month.OCTOBER.getSeason()); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda