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

265
Vistas
JDK17+: ¿Por qué no es posible tener una sola rama de interruptor que coincida con varios patrones de tipos?

Solo me preguntaba cuál es / fue la razón de diseño para esto.

puedo hacer

 int x = ... switch( x ) { case 1,2 -> { ... stuff ...} default -> { ... something else ...} }

pero tratando de hacer algo como

 Object x = ... switch( x ) { case String, Integer x -> { ... stuff ...} default -> { ... something else ...} }

no compila (también probé cosas como "String x, Integer x" y "String|Integer x" pero ninguno de ellos compila).

Si entendí el JLS correctamente, simplemente no es compatible. ¿Alguien sabe por qué es así y si alguna vez se solucionará?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Después de leer JEP-420 nuevamente encontré una explicación:

JEP-420

Sigo pensando que esto debería ser posible si el cuerpo de la rama en realidad no se refiere a las etiquetas del caso, por ejemplo, en un código como este (ApplicationState es una clase sellada con varias subclases, tenga en cuenta que no puedo usar una enumeración aquí como algunos de los los estados necesitan contener datos mutables):

 private static ApplicationState checkValidTransition(ApplicationState from, ApplicationState to ) { final boolean isValidTransition = switch(from) { case Uninitialized ignored -> to instanceof ServletContextInitializing; case Destroyed ignored -> to instanceof ServletContextInitializing; case ServletContextInitializing ignored -> to instanceof SpringContextInitializing || to instanceof Destroyed; case SpringContextInitializing ignored -> to instanceof SpringContextInitializing || to instanceof Destroyed || to instanceof WebApplicationInitFinished; case WebApplicationInitFinished ignored -> to instanceof Destroyed; }; if ( ! isValidTransition ) { throw new IllegalStateException( "Internal error, illegal state transition " + from + " -> " + to ); } return to; }
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