Cuando se marcan las excepciones de los métodos en un constructor que el constructor no puede manejar, está bien capturarlas y descartarlas como una excepción de tiempo de ejecución si está seguro de que la aplicación no puede manejarlo y será inútil sin el objeto que se está construyendo?¿Está bien para los constructores lanzar excepciones de tiempo de ejecución?
Respuesta
Sí, esto es inevitable en muchos constructores cuando llaman a otros métodos, ya que siempre existe la posibilidad de que ya emitan excepciones sin marcar.
Este es un buen punto. – insipid
Sí, es completamente válido arrojar la excepción en su constructor. Usted tiene poco o ningún otro remedio que hacer esto, especialmente cuando simplemente está tratando de construir un objeto y las cosas simplemente no funcionan bien.
Sí. A menos que sepa cómo se debe manejar la excepción, es mejor que la arroje, en lugar de simplemente tragarla e imprimir un rastro de pila (o peor, no hacer absolutamente nada).
Esto ayudará a prevenir algunos errores extremadamente difíciles de depurar más adelante.
Sí. Esta es una práctica estándar.
En Effective Java, 2nd Ed. esto está cubierto por el elemento 61, "Lanzar excepciones apropiadas para la abstracción". Si Java Effective también incluye la excepción resultante marcada o no seleccionada en el Ítem 58, "Usar excepciones marcadas para condiciones recuperables y excepciones de tiempo de ejecución para errores de programación".
Que esto es un constructor en lugar de un método normal no es realmente un problema. (De hecho, los constructores tienen más libertad ya que no están vinculados por la interfaz del super.)
Al lanzar una excepción como resultado de otra excepción, es una buena idea asegurarse de que está configurando el cause
en el nuevo excepción.
Está perfectamente bien lanzar una excepción marcada para indicar que la construcción del objeto falló, como ya comentó Chris Jester-Young. Si es una buena idea lanzar una excepción sin marcar es otro problema. Perderá las molestias del compilador que lo insta a atrapar y manejar la excepción, lo cual seguramente querrá hacer.
¿por qué lo deseas? la mayoría de las veces no quiere manejarlo, es un error, deje que se ejecute en la pila a un registrador/controlador de trabajo. – reto
Personalmente, odio ver constructores arrojar excepciones marcadas (como doppeldish ya se señaló). Sin embargo, ¿cómo puede estar seguro de que la aplicación no puede manejar la excepción? Incluso si la aplicación no puede manejarlo, tal vez el usuario pueda, simplemente intentándolo de nuevo.
+1 algo que considerar: P gracias – insipid
- 1. ¿Está bien lanzar un java.lang.Error?
- 2. Lanzando excepciones de los constructores
- 3. ¿Está bien pasar DataReaders a los constructores?
- 4. ¿Está bien lanzar manualmente un std :: bad_alloc?
- 5. Consideraciones de rendimiento para lanzar excepciones
- 6. Excepciones en constructores
- 7. Declarar y lanzar contra lanzar sin excepciones
- 8. Getting EasyMock simula objetos para lanzar excepciones
- 9. ¿Está bien lanzar una excepción NotImplemented en métodos virtuales?
- 10. Eliminación de excepciones en constructores de C++
- 11. ¿Está bien lanzar un puntero que sea nulo?
- 12. ¿Está bien derivar de System.ArgumentException?
- 13. ¿Se pueden lanzar objetos con constructores de copia privada?
- 14. ¿La mejor manera de lanzar excepciones en el código JNI?
- 15. operador sobrecargado no lanzar excepciones
- 16. Lanzar excepciones de un constructor en .NET
- 17. Lanzar excepciones comprobadas de clases internas anónimas
- 18. Lanzar excepciones personalizadas en Java
- 19. ¿comprobó que las excepciones suceden en el tiempo de ejecución?
- 20. ¿Cómo puedo convertir los errores de enlace en excepciones de tiempo de ejecución?
- 21. Manejo de excepciones: lanzar, arrojar y Throwable
- 22. ¿Qué arrojar al lanzar excepciones de C++?
- 23. ¿Está bien omitir los niveles de encabezado?
- 24. Conjunto DOP para lanzar excepciones de forma predeterminada
- 25. ¿Desea lanzar excepciones en un autocargador SPL?
- 26. ¿Está bien usar constructores para inicializar un vector 2D como un trazo en C++?
- 27. Lanzar excepciones y notificar al usuario
- 28. ¿Cómo manejo adecuadamente las excepciones en los constructores?
- 29. ¿Pueden los fabricantes arrojar excepciones en Java?
- 30. Cómo lanzar 404 excepciones en Zend Framework
Sí, arrojar una excepción desde el constructor es la forma estándar de abortar la creación de un objeto. –
+1 - buena pregunta para los recién llegados a OOP – JonH