Sto lavorando con un'API che afferma di restituire true se ha esito positivo e false se fallisce. Ma sostiene anche di lanciare eccezioni diverse se fallisce. Come può restituire false e generare un'eccezione?Restituisce un valore E genera un'eccezione?
risposta
Non è possibile generare un'eccezione e restituire un valore da una singola chiamata di funzione.
Forse fa qualcosa come tornare false
se c'è un errore, ma un'eccezione se l'ingresso non è valido.
edit: PaulPRO inviato un (ormai eliminato) risposta sottolineando che si tratta di tecnicamente possibile causare un'eccezione per essere gettato in un thread diverso, mentre tornava un valore in quella attuale. Ho pensato che fosse degno di nota, anche se non è qualcosa che dovresti vedere.
È possibile generare un'eccezione che ha una (in questo caso booleano) Valore:
public class ValueException extends Exception {
final boolean value;
public ValueException(boolean value, String message) {
super(message);
this.value = value;
}
public boolean getValue() {
return value;
}
}
Mentre è possibile scrivere il codice in modo tale che un'eccezione e un valore possono essere derivate da una chiamata a una funzione (vedi i post precedenti), non dovrebbe MAI essere fatto nella corretta codifica.
Mi piacerebbe vedere un collegamento alla documentazione su questa API. Le API dovrebbero dare priorità alla chiarezza. Lanciare un'eccezione e restituire un valore lascia la domanda se il valore che è stato restituito è sicuro da usare o se non è valido.
Ricordare che i blocchi try/catch sono l'altro metodo di gestione delle eccezioni. Non passano l'eccezione al metodo di chiamata, ma gestiscono internamente in un modo che lo sviluppatore ritenga appropriato.
Se, a scopo di debug, è necessario vedere il valore risultante in caso di eccezione, l'idea di Boemia funziona bene.
- 1. Come `({...})` restituisce un valore?
- 2. Confrontando Nan e restituisce un valore nullo valore illogicità
- 3. getHours() restituisce un valore errato
- 4. Come uscire da un app Lucido e restituisce un valore
- 5. Can queue: pop restituisce un valore ora?
- 6. Subprocess.poll() restituisce erroneamente un valore
- 7. ContextCompat.checkSelfPermission() restituisce un valore errato
- 8. Come si restituisce un valore predefinito se un LINQ to entità query non restituisce alcun valore
- 9. Restituisce un valore quando si utilizza jQuery.each()?
- 10. outerHeight (true) restituisce un valore errato
- 11. GetSystemMetrics() restituisce un valore errato per SM_CXSCREEN
- 12. Android - Perché onItemLongClick (...) restituisce un valore booleano?
- 13. funzione anonima non restituisce sempre un valore
- 14. Perché Int64.MaxValue restituisce un valore Long?
- 15. Genera sequenza con valore passo
- 16. GetThreadLocale restituisce un valore diverso da GetUserDefaultLCID?
- 17. SecItemCopyMatching restituisce un valore nullo senza errori
- 18. Perché questa funzione Perl restituisce un valore?
- 19. Perché operator ++ restituisce un valore non const?
- 20. Meteor.methods restituisce un valore non definito
- 21. Il metodo C# restituisce un valore?
- 22. La funzione C++ restituisce un valore, ma a questo può essere assegnato un nuovo valore?
- 23. NodeJS Crypto con RC4 restituisce un valore vuoto
- 24. Android: genera un finto intento e restituisce alcuni dati intent da esso
- 25. SqlParameter con valore Nullable genera un errore mentre ExecuteNonQuery?
- 26. : quale denominazione di un metodo che restituisce un valore booleano?
- 27. MySQL Sottostringa restituisce valore vuoto
- 28. Restituisce il valore casuale dall'elenco
- 29. Restituisce sempre il valore positivo
- 30. Perché l'utilizzo di un valore intero Java in valori predefiniti genera un valore NullPointerException?
Questo è quello che ho capito. Pensavo che ci potesse essere qualche trucco con un blocco finalmente però. – mark
una volta che viene lanciata un'eccezione il programma si arresta, quindi è impossibile eseguire entrambe le operazioni. Mi chiedo se hai una dichiarazione di ritorno nel tuo blocco 'try', il programma passa ancora il blocco 'finale', perché se dovessi restituire un valore nel blocco try e mettere un'eccezione nel blocco Final dovresti Ho fatto entrambe le cose .. –
@ Karel-Jan Misseghers: no, in Java il tuo programma ** NON DEFINITIVAMENTE ** smette di funzionare quando viene lanciata un'eccezione. Sei confuso su come funzionano le eccezioni Java e ovviamente non hai ancora fatto alcuna programmazione Java multi-thread. Puoi avere molti thread che funzionano felicemente quando un'eccezione non controllata si verifica in un altro thread. Ci sono molti casi in cui il thread di morte viene riavviato automaticamente (il più famoso è l'EDT di Swing su alcuni OS/JVM: se l'EDT muore, viene riavviato un nuovo EDT). – SyntaxT3rr0r