Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

263
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!