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

176
Vistas
Java-17 - caso de cambio - Los parámetros de método no utilizados deben eliminarse

Tengo un método simple que toma una enumeración y devuelve una cadena:

 public static String enumToString(MyEnum type) { return switch (type) { case Enum1 -> "String_1"; case Enum2 -> "String_2"; case Enum3 -> "String_3"; case Enum4 -> "String_4"; case Enum5 -> "String_5"; case Enum6 -> "String_6"; default -> null; }; }

Pero Sonar me da este error importante: los parámetros de método no utilizados deben eliminarse .

como puede ver, el tipo de parámetro se usa en el interruptor. Para obtener más detalles, cuando uso la caja del interruptor anterior, todo está bien.

¿Alguna idea sobre el problema? ¿El sonar cubre nuevas sintaxis de Java?


Hmm, me doy cuenta de que cuando elimino default -> null; paso de sonar correctamente! esto es raro

 public static String enumToString(MyEnum type) { return switch (type) { case Enum1 -> "String_1"; case Enum2 -> "String_2"; case Enum3 -> "String_3"; case Enum4 -> "String_4"; case Enum5 -> "String_5"; case Enum6 -> "String_6"; //default -> null; }; }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto no es un error, Sonar evalúa correctamente que si la lista es exhaustiva , la expresión de cambio nunca puede caer en la rama default .

Por otro lado, si decide no enumerar todas las posibles constantes de enumeración, la rama default , sin embargo, debe declararse. De lo contrario, el código no sería compilable debido al requisito de que cada constante de enumeración pueda coincidir.

Nota: Su código contiene una expresión de cambio, no una declaración de cambio.

over 4 years ago · Santiago Trujillo Denunciar

0

Técnicamente, la sintaxis default -> null; no es un "parámetro". El JLS se refiere a varios componentes dentro de un bloque de interruptores como una "regla", "etiqueta" o "expresión"; mientras que la JEP pertinente también utiliza el término “cláusula”.

Independientemente de cómo llame a sus componentes, las Expresiones de cambio son distintas de las Declaraciones de cambio más antiguas. En particular, las expresiones de cambio son exhaustivas .

de la JEP,

Agotamiento

Los casos de una expresión de cambio deben ser exhaustivos ; para todos los valores posibles debe haber una etiqueta de interruptor coincidente. (Obviamente, no se requiere que las declaraciones de cambio sean exhaustivas).

En la práctica, esto normalmente significa que se requiere una cláusula por defecto; sin embargo, en el caso de una expresión de enum switch de enumeración que cubre todas las constantes conocidas, el compilador inserta una cláusula predeterminada para indicar que la definición de enumeración ha cambiado entre el tiempo de compilación y el tiempo de ejecución. Confiar en esta inserción de cláusula predeterminada implícita hace que el código sea más robusto; ahora, cuando se vuelve a compilar el código, el compilador verifica que todos los casos se manejen explícitamente. Si el desarrollador hubiera insertado una cláusula predeterminada explícita (como es el caso hoy), se habría ocultado un posible error.

Sonar es lo suficientemente inteligente como para saber cuándo están cubiertas todas las bases, lo que hace que una cláusula predeterminada no solo sea inalcanzable, sino que interfiere con el comportamiento descrito anteriormente.

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