Estoy trabajando con una API que dice que es verdadera si tiene éxito y falsa si falla. Pero, también afirma lanzar excepciones diferentes si falla. ¿Cómo puede devolver falso y lanzar una excepción?¿Devuelve un valor Y lanza una excepción?
Respuesta
No es posible arrojar una excepción y devolver un valor desde una sola llamada a función.
Quizás haga algo así como devolver false
si hay un error, pero lanzar una excepción si la entrada no es válida.
edición: PaulPRO registró una respuesta (ahora suprimido) señalando que es técnicamente posible hacer una excepción a ser lanzado en un hilo diferente, mientras que devolver un valor en el actual. Pensé que esto era digno de mención, incluso si no es algo que nunca deberías ver.
Usted puede lanzar una excepción que tiene una (en este caso booleano) Valor:
public class ValueException extends Exception {
final boolean value;
public ValueException(boolean value, String message) {
super(message);
this.value = value;
}
public boolean getValue() {
return value;
}
}
Si bien es posible escribir el código de una manera tal que una excepción y un valor se pueden derivar desde una llamada de función (ver las publicaciones anteriores), NUNCA se debe hacer con la codificación adecuada.
Me gustaría ver un enlace a la documentación de esta API. Las API deben dar prioridad a la claridad. Lanzar una excepción y devolver un valor deja la pregunta de si el valor que se devuelve es seguro de usar o si no es válido.
Recuerde, los bloques try/catch son el OTRO método para manejar excepciones. No pasan la excepción al método de llamada, pero lo manejan internamente de una manera que el desarrollador considere apropiado.
Si, para la depuración, necesita ver el valor resultante en el caso de una excepción, entonces la idea de Bohemian funciona bien.
- 1. Cómo hacer un simulacro lanza una excepción la primera vez y devuelve un valor el segundo
- 2. ¿Por qué AudioServicesCreateSystemSoundID lanza una excepción internamente pero devuelve 0 como un código de error?
- 3. _CRT_DEBUGGER_HOOK lanza la excepción
- 4. Python - probar una propiedad lanza excepción
- 5. MySQL Query ejecuta pero lanza una excepción
- 6. Salto cuando se lanza una excepción
- 7. Marshal.GetActiveObject() lanza una excepción MK_E_UNAVAILABLE en C#
- 8. ¿Cómo funciona RAII cuando un constructor lanza una excepción?
- 9. SingleOrDefault() lanza una excepción en más de un elemento de
- 10. Enviando un correo electrónico cuando se lanza una excepción
- 11. Control de flujo de Ruby: ¿lanza una excepción, devuelve nil o deja que falle?
- 12. ¿Cómo generar una excepción ActiveRecord :: Rollback y devolver un valor?
- 13. creación std :: hilo lanza excepción
- 14. XmlWriter.WriteCData lanza una excepción ArgumentException - carácter no válido
- 15. ¿Cómo `({...})` devuelve un valor?
- 16. Hoja de trabajo get_Range lanza excepción
- 17. Mi aplicación con frecuencia lanza excepción android.view.WindowLeaked -
- 18. GWT: amarre lanza excepción NullPointer la depuración
- 19. ¿Qué sucede si se lanza una excepción durante finalize()
- 20. ¿DataAdapter.Fill() cierra su conexión cuando se lanza una excepción?
- 21. BitmapFactory.decodeStream devuelve nulo sin excepción
- 22. SPContext.Current.Web.CurrentUser devuelve un valor engañoso
- 23. ¿Hay alguna forma de obtener el valor String de una HttpEntity cuando EntityUtils.toString() devuelve una excepción?
- 24. Subprocess.poll() devuelve un valor falsamente
- 25. Macro que devuelve un valor
- 26. Registry.LocalMachine.OpenSubKey() devuelve un valor nulo
- 27. Al leer un Cursor de un archivo de recursos, se lanza una excepción de argumento
- 28. Cómo desactivar "Interrumpir cuando se lanza una excepción" para los tipos de excepción personalizados
- 29. JPA: ELIMINAR DONDE no se elimina a los niños y se lanza una excepción
- 30. C# TimeSpan.El formato no válido devuelve un valor incorrecto en lugar de la excepción
Eso es lo que pensé. Aunque pensé que podría haber algún truco con un bloqueo final. – mark
una vez que se produce una excepción, su programa deja de ejecutarse, por lo que es imposible hacer ambas cosas. Me pregunto si tienes una declaración de devolución en tu bloque de "prueba", ¿el programa aún pasa el bloque "final", porque si devolvieras un valor en el bloque de prueba y pusieras una Excepción de lanzamientos en el bloque Final lo harías? He hecho ambas cosas ... –
@ Karel-Jan Misseghers: no, en Java su programa ** DEFINITIVAMENTE NO ** deja de funcionar una vez que se lanza una excepción. No está seguro de cómo funcionan las excepciones de Java y, obviamente, aún no ha realizado ninguna programación de Java multiproceso. Puede tener muchos subprocesos que funcionan sin problemas cuando ocurre una excepción sin marcar en otro subproceso. Hay muchos casos en que el hilo que se está muriendo se reinicia automáticamente (el más famoso es el EDT de Swing en algunos OS/JVM: si el EDT muere, se reinicia un nuevo EDT). – SyntaxT3rr0r