Try-catch: ¿es esta práctica aceptable?

Hemos recibido código Java de un proveedor de software. Contiene muchos try-catchbloques sin nada en la catchparte. Están por todo el lugar. Ejemplo:

        try {
            spaceBlock.enable(LindsayModel);
        } catch (Exception e) {
        }

Mis preguntas son: ¿Es la práctica aceptable anterior? ¿Si es así cuando? ¿O debería seguir adelante y eliminar todos estos "falsos" tryy catchdeclaraciones?

Para mí, esto parece una práctica terrible, pero no tengo suficiente experiencia en Java para asegurarlo. ¿Por qué detectar errores si no vas a hacer nada con ellos? Me parece que solo lo harías si estuvieras seguro de que una excepción no tendría absolutamente ninguna consecuencia y no te importa si ocurre una. Sin embargo, este no es realmente el caso en nuestra aplicación particular.

EDITAR Para dar un poco de contexto: compramos un producto programable en Java al proveedor. Junto con el producto, proporcionaron una gran secuencia de comandos de prueba de concepto adaptada a nuestras necesidades. Este script vino "gratis" (aunque no habríamos comprado el producto si no hubiera venido con el script) y "funciona". Pero el script es un verdadero dolor sobre el cual construir, debido a muchas cosas que incluso yo, como novato en Java, reconozco como una práctica horrible, una instancia es este negocio falso de prueba y captura.

Respuesta 1

Terrible, de hecho. Tragar una excepción como esta puede ser peligroso. ¿Cómo sabrá si algo malo ha sucedido?

Me sentiría mejor si el proveedor escribiera comentarios para documentar y reconocerlo ("Sabemos lo que estamos haciendo"). Me sentiría aún mejor si hubiera una estrategia aparente en el código para lidiar con las consecuencias. Envuélvalo en una RuntimeException y vuelva a lanzarlo; establezca el valor de retorno en un valor apropiado. ¡Cualquier cosa!

"Por todo el lugar"? ¿Hay múltiples bloques try / catch que ensucian el código? Personalmente, no me gusta ese idioma. Prefiero uno por método.

Tal vez debería encontrar un nuevo proveedor o escribir el suyo propio.

Respuesta: 2
    try {
        meshContinuum.enable(MeshingModel);
    } catch (Exception e) {
    }

Esto parece un código inacabado. Si el método enable arroja una excepción, el código lo atrapará y lo tragará. Si no es así, no tiene sentido tratar de detectar una excepción que no ocurre.

Verifique para ver los métodos y dónde no siguen sus firmas throws exceptionName, luego elimine las declaraciones vacías try-catch de los lugares donde se llaman.

Teóricamente, puede poner try-catch alrededor de cualquier declaración. El compilador no se quejará al respecto. Sin embargo, no tiene sentido, ya que de esta manera se pueden ocultar excepciones reales.

Puede ver esto como un signo de mala calidad del código. Probablemente debería estar preparado para encontrarse con problemas de diferente tipo también.

Respuesta: 3

No es lo mejor:

  • Oculta evidencia de la excepción, por lo que la depuración es más difícil

  • Puede hacer que las funciones fallen silenciosamente

  • Sugiere que el autor podría haber querido manejar la excepción pero nunca lo logró

Entonces, puede haber casos en los que esto esté bien, como una excepción que realmente no tiene ninguna consecuencia (el caso que viene a la mente es Python mkdirs, que arroja una excepción si el directorio ya existe), pero generalmente, no es tan bueno.

Respuesta: 4

¿Qué especificó su contrato con el proveedor? Si lo que escribieron, malas prácticas y todo, cumple con las especificaciones, le cobrarán por una reescritura.

Es mejor especificar un conjunto de pruebas que ingresarán en muchos o todos esos bloques try-catch y, por lo tanto, fallarán. Si las pruebas fallan, tiene un mejor argumento para hacer que arreglen su terrible código.

Respuesta: 5

Soy un novato en Spring, comencé a desarrollar una aplicación para cargar archivos, utilicé la documentación oficial de Spring pero tengo este error: el procesamiento del controlador falló; La excepción anidada es java.lang ....

Estoy tratando de actualizar la base de datos una vez que he cambiado RichTextBox y he salido de RichTextBox (es decir, no quiero obligar al usuario a presionar un "botón Actualizar"). Sin embargo, mi código arroja el ...

No se puede hacer clic en los elementos de mi vista de lista. He intentado obtener foco actual () y bloquear descendientes en la etiqueta RelativeLayout en content_palce.xml. Todo lo que quiero de la lista son dos funciones: cuando hago clic en ...

Estoy desarrollando una funcionalidad para mi proyecto que cuando el usuario ingresa 'Código postal', deben aparecer las coordenadas (latitud, longitud) para el correspondiente 'código postal'. la implementación ...