¿Se considera una mala práctica lanzar una excepción desde un constructor de objetos si los datos pasados no son válidos?
Absolutamente no. A menos que hacerlo no cumpla con la estrategia de manejo de errores de su organización / aplicación.
Java tuvo un manejo de excepciones desde el principio y la mayoría del código y las bibliotecas son compatibles con él. También hay reglas de idioma para ayudar a garantizar que se manejen las excepciones que se deben manejar (en algún lugar).
- ¿Cuál es la diferencia entre Flash y AJAX para un desarrollador web?
- ¿Dónde puedo probar mi conocimiento del software Blender 3D?
- ¿La lista de los principales lenguajes de programación se reducirá o crecerá en el futuro?
- ¿Cuáles son los mejores servicios web para reducir los tiempos de carga de su sitio web?
- Cómo comenzar en la lucha de robots
Siempre será mejor en Java lanzar una excepción en lugar de:
- Crea un objeto no válido.
- Crear un objeto ‘inerte’ en respuesta a argumentos no válidos
- Cree un método de constructor proxy que devuelva
null
(o de lo contrario devuelve sin crear un objeto e indica tal). - Verifique que los argumentos crearán un objeto válido antes de intentar crear uno.
- Cree un objeto inerte (utilizando un constructor predeterminado) y luego valide los argumentos ‘reales’ en un miembro / método que realice la construcción ‘real’ y devuelva un error si falla.
- Abortar la ejecución del hilo / aplicación.
La creación de un objeto inerte (punto 2) puede requerir un estado adicional e incluso código en sus métodos para tener respuestas de ‘no hacer nada’ a las solicitudes. Dichos objetos que se devuelven a la lógica que no tiene idea de que se ha pasado a ser un ficticio son una pesadilla total de comportamiento de aplicación extraño e insondable.
La respuesta en C ++ es un poco más matizada porque el manejo de excepciones llegó más tarde y se usa en entornos más diversos que Java y no todas las aplicaciones admiten el manejo de excepciones.
Para ser claros, todas las cosas son iguales y no hay restricciones debido a una estrategia existente, una restricción ambiental o una biblioteca de códigos amigable que no sea una excepción. errores de datos (que no son inesperados y deben manejarse en alguna ruta de control ‘normal’).
Tanto en C ++ como en Java, los lenguajes tienen una semántica clara y bien definida de lo que sucede cuando se lanza una excepción durante la creación de objetos y cómo se destruirá cualquier clase de base / súper construida.
Un caso de prueba para la mayoría de los modelos es “Si quiero eliminar la serialización de un objeto de una secuencia, ¿cómo manejo la falla de E / S en la secuencia antes de que termine?”. Las opciones comunes son ir por el # 4 o # 5 en este caso.