¿Algún motivo importante para definir las excepciones de custome en Java?¿Cuáles son las ventajas de definir una excepción personalizada?
Respuesta
dos razones inmediatamente vienen a la mente:
- Simplemente para que no se diga
try { ... } catch (Exception e) { ... }
- tener sus propias subclases le permite tratar los casos de excepción distintas por separado. (Como la diferencia entre no tener permisos para ejecutar un informe y la ejecución del informe que falla). - Puede agregar contexto adicional; por ejemplo, si tiene su propio
AlreadyLoggedInException
, por ejemplo, esa excepción puede tener un método para recuperar la dirección IP desde la cual se inició la otra sesión. O unAccountLimitExceededException
podría contener el límite de cuenta actual. La información adicional en la excepción le permite potencialmente tomar una respuesta más informada al atraparla.
Proporcionando información específica de error, lo que permite manejadores de excepciones más finos.
Sí. La gran ventaja es que le permite lanzar y excepciones que significan lo que usted quiere que signifiquen. Si reutiliza una excepción existente, cualquier parte de su código que capte la excepción tiene que tratar con la posibilidad de que la excepción real no haya sido lanzada por su código, sino por algún otro código de parte de la biblioteca. Esto tiende a hacer que el manejo de errores sea más lento.
Con una excepción personalizada, puede decirle a sus interlocutores que ha ocurrido un tipo específico de error, en lugar de solo un error. Y las personas que llaman pueden hacer algo específico para este tipo de error.
Usemos la analogía de un automóvil: ¿prefiere que su automóvil se niegue a comenzar con una luz roja única parpadeando o con una luz dedicada de "tanque de gasolina vacío" parpadeando?
Sé lo que intenta decir, pero hablar de mensajes no es una buena analogía. Si solo se tratara de mensajes, podríamos simplemente 'lanzar una nueva excepción (" No comenzaré porque me he quedado sin gasolina ")' –
Tienes razón. Como siempre, una analogía con el automóvil no es una muy buena analogía. Editaré mi publicación para evitar hablar de mensajes. –
En pocas palabras, le permite manejar cada excepción de la manera correcta.
Considere el siguiente código
try {
doSomethingThatCouldThrowManyExceptions();
}
catch (ExceptionalCircumstance1 ex) {
// deal with this specific circumstance
}
catch (ExceptionalCircumstance2 ex) {
// deal with this specific circumstance
}
catch (ExceptionalCircumstance3 ex) {
// deal with this specific circumstance
}
finally {
// do some common code
}
Sin esto, se quedaría tratando de hacer un cajón de sastre tipo de excepción.
Sin embargo, si todo va bien, la jerarquía de clases todavía significa que aún puede detectar todas las excepciones usando catch(Exception ex) {}
.
En mi opinión, la principal motivación para las excepciones personalizadas es lograr un mejor modelado de su dominio de aplicación. Al diseñar las clases, se gasta una gran cantidad de esfuerzo para nombrar objetos y asignar sus responsabilidades. Creo que en este momento es una buena inversión realizar algunos esfuerzos para considerar las posibles condiciones de error. Por ejemplo, al cavar más profundo, los clientes a menudo pueden darle algunos ejemplos comunes que deben manejarse (por ejemplo, datos no válidos, violación de restricciones lógicas, sensores no confiables, etc.). Como resultado, tendrá un código que es más fácil de comprender y modificar. Los errores específicos de la aplicación están muy bien separados y el manejo de errores adicionales se puede lograr fácilmente.
Otro punto es que podría proporcionar una mejor abstracción para diferentes partes del sistema. Por ejemplo, si realmente anticipa que la implementación de la parte de persistencia cambiará en el futuro, entonces es mucho mejor usar excepciones personalizadas en su API.De lo contrario, más adelante te divertirás mucho lidiando con SQLException o SAXExceptions en muchos lugares diferentes :-)
- 1. ¿Cuáles son las ventajas de definir una clave externa
- 2. Cuáles son las ventajas de VistaDB
- 3. ¿Cuáles son las ventajas de Perforce?
- 4. ¿Cuáles son las ventajas de usar Automapper?
- 5. ¿Cuáles son las ventajas de Lazy Evaluation?
- 6. ¿Cuáles son las ventajas de utilizar Rubinius
- 7. ¿Cuáles son las ventajas de usar Qt?
- 8. ¿Cuáles son las ventajas prácticas del currying?
- 9. ¿Cuáles son las ventajas de las macros de esquema?
- 10. ¿Cuáles son las ventajas reales de las colecciones inmutables?
- 11. ¿Cuáles son las ventajas y desventajas de definir rutas Camel en Spring xml?
- 12. ¿Cuáles son las ventajas de un procesador de 64 bits?
- 13. ¿Cuáles son las ventajas de utilizar POCO en DataTables?
- 14. ¿Cuáles son las ventajas de cargar DLL de forma dinámica?
- 15. ¿Cuáles son las ventajas de Blocking Queue en Java?
- 16. ¿Cuáles son las ventajas de usar Ruby NArray sobre Array?
- 17. ¿Cuáles son las 'grandes' ventajas de tener Poco con ORM?
- 18. ¿Cuáles son las ventajas de un MembershipProvider personalizado en ASP.NET?
- 19. ¿Cuáles son las ventajas de PyQt sobre PyGTK y viceversa?
- 20. Cuáles son las ventajas de MVC3 sobre MVC2
- 21. ¿Cuáles son las ventajas de concurrent.futures sobre multiproceso en Python?
- 22. ¿Cuáles son las ventajas del uso de Node.js vs PHP
- 23. ¿Cuáles son las ventajas de usar SVN sobre CVS?
- 24. cuáles son las ventajas de usar plpgsql en postgresql
- 25. ¿Cuáles son las ventajas y desventajas de usar OpenID?
- 26. ¿Cuáles son las ventajas y desventajas de usar esquemas XML?
- 27. ¿Cuáles son las ventajas de usar un errback?
- 28. ¿Cuáles son las ventajas de LePUS3 sobre UML?
- 29. Cuáles son las ventajas de C# sobre Python
- 30. ¿Cuáles son las ventajas de git over git-svn?
¿podrías darme un ejemplo de trabajo para que quede más claro para mí? – Deepak