Pracuję z interfejsem API, który twierdzi, że zwraca wartość true, jeśli się to uda, i false, jeśli się nie powiedzie. Ale także twierdzi, że rzuca różne wyjątki, jeśli zawiedzie. W jaki sposób może zwrócić false i rzucić wyjątek?Zwróć wartość ORAZ wyrzuć wyjątek?
Odpowiedz
Nie można zgłaszać wyjątków i zwracać wartości z pojedynczego wywołania funkcji.
Być może powoduje to coś w rodzaju zwracania false
, jeśli wystąpił błąd, ale zgłoszenie wyjątku, jeśli dane wejściowe są nieprawidłowe.
edit: PaulPRO napisali (teraz już usunięty) odpowiedź wskazując, że jest to techniczniemożna spowodować wyjątek być rzucony w innym wątku, wracając wartość w aktualnej. Pomyślałem, że warto to zauważyć, nawet jeśli nie jest to coś, co powinno się kiedykolwiek zobaczyć.
Można wyjątek że ma się (w tym przypadku Boolean) wartość:
public class ValueException extends Exception {
final boolean value;
public ValueException(boolean value, String message) {
super(message);
this.value = value;
}
public boolean getValue() {
return value;
}
}
Choć możliwe jest, aby napisać kod w taki sposób, że wyjątek i wartość można wyprowadzić od wywołania funkcji (patrz powyższe posty), NIGDY nie powinno się tego robić przy odpowiednim kodowaniu.
Chciałbym zobaczyć link do dokumentacji tego interfejsu API. Interfejsy API powinny nadać priorytet przejrzystości. Zgłaszanie wyjątku i zwracanie wartości pozostawia pytanie, czy zwracana wartość jest bezpieczna w użyciu, czy jest niepoprawna.
Pamiętaj, że bloki try/catch to INNA metoda obsługi wyjątków. Nie przekazują one wyjątku do metody wywołującej, ale obsługują ją wewnętrznie w sposób, który programista uzna za właściwy.
Jeśli, dla celów debugowania, musisz zobaczyć wynikową wartość w przypadku wyjątku, to pomysł Bohemiana działa dobrze.
- 1. Ponownie wyrzuć wyjątek celu wyjątku InvocationTargetException
- 2. Zwróć wartość z instrukcji wstawiania
- 3. Android akceptuje tylko znaki między AZ i AZ
- 4. Zwróć wartość domyślną, jeśli nie znaleziono wierszy.
- 5. Zwróć tylko wartość tablicy w projekcji mongo
- 6. Zwróć wartość za pomocą funkcji jQuery each()
- 7. RxJava Zwróć wartość subskrybowaną w funkcji
- 8. Zwróć wartość ciągu na podstawie warunku XPATH
- 9. Zwróć wartość logiczną na SQL Wybierz instrukcję
- 10. groovy: znajdź klucz na mapie i zwróć jego wartość
- 11. Sterowanie przepływem ruby: wyrzuć wyjątek, wróć do zera lub pozwól mu zawieść?
- 12. jak wymienić łaciński unicode charakter [AZ] znaków
- 13. Android - Użyj WebView do oceny łańcucha javascript i zwróć wartość
- 14. Zwróć wartość, jeśli nie zostaną znalezione żadne wiersze. SQL
- 15. Iterables.find i Iterators.find - zamiast rzucać wyjątek, uzyskaj wartość null
- 16. zapewnić wartość na „System.Windows.Data.Binding” zwrócił wyjątek
- 17. wyjątek jeśli nieprawidłowa wartość jest przekazywana w
- 18. Wyjątek, gdy parametr AddWithValue ma wartość NULL
- 19. wyrzuć nowy błąd ("Wymagana opcja MongoStore" brak `db`);
- 20. JSDoc: Zwróć obiekt struktury
- 21. Zwróć lokalny wskaźnik
- 22. Szyny: Zwróć 401?
- 23. Zwróć wszystkie indeksy określonego podłańcucha.
- 24. Zwróć obiekt z tablicy o najwyższej wartości
- 25. Zaznacz dowolną komórkę bez określonych znaków (małe litery az) wewnątrz
- 26. Niejasność gramatyki: dlaczego? (Problem brzmi: "(a)" vs "(AZ)")
- 27. Funkcja nie powiodła się: Podnieś wyjątek lub zwróć FALSE? Jakie jest lepsze podejście?
- 28. Zwróć określone pola z .populate() z Mongoose
- 29. Zwróć wiele zmiennych z funkcji JavaScript?
- 30. Zwróć typ pożyczony lub posiadany w Rust
To, co wymyśliłem. Pomyślałem, że może być jakiś trik z blokiem w końcu. – mark
po zgłoszeniu wyjątku program przestaje działać, nawet jeśli nie można wykonać obu tych czynności. Zastanawiam się, czy masz zwrot w swoim bloku "try", czy program nadal przechodzi "ostatni" blok, ponieważ jeśli zwrócisz wartość w bloku try i wrzucisz wyjątek throwów do bloku końcowego, to 've done both .. –
@ Karel-Jan Misseghers: nie, w Javie twój program robi ** ZDECYDOWANIE NIE ** przestaje działać po zgłoszeniu wyjątku. Nie masz pojęcia, jak działają wyjątki Javy, i oczywiście nie przeprowadziłeś jeszcze wielowątkowych programów Java. Możesz mieć wiele wątków, które z powodzeniem pracują, gdy niesprawdzony wyjątek ma miejsce w innym wątku. Istnieje wiele przypadków, w których wątek umierający jest ponownie uruchamiany automatycznie (najsłynniejszym z nich jest EDT Swinga w niektórych systemach OS/JVM: w przypadku śmierci EDT ponownie uruchamia się nowy EDT). – SyntaxT3rr0r