Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

272
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda