public class AnimalException extends Exception {
public AnimalException(String error) {
super(error);
}
}
public class Zoo {
private String animal;
private String food;
public Zoo (String animal, String food) throws AnimalException {
this.animal = animal;
if (findWord(animal, "wolf")) {
throw new AnimalException("This animal is a predator.");
//something ought to be done here, I reckon
}
else {
this.food = food;
}
}
public static boolean findWord(String word, String find) {
int total = 0;
int idx = 0;
while ((idx = word.indexOf(find, idx))!= -1) {
total++;
idx++;
}
if (total == 0) {
return false;
}
else {
return true;
}
}
Co chciałbym zrobić, to kiedy wolf
zostaje złapany w konstruktorze wartość food
zmienia się automatycznie do czegoś innego. Próbowałem jednak użyć getter-setters
, jednak pojawia się błąd unreachable code
. Co mam zrobić?Catching wyjątek w konstruktorze
Gdzie zawiesza się twój kod? –
Wyrzucenie wyjątku oznacza na ogół "panikę i natychmiast zamknąć ten kod, pozostawiając rzeczy tak zepsute, jak są w tym momencie". W szczególności, podczas rzucania z konstruktora wynik operatora 'new' nie będzie użyteczny, ponieważ przepływ kodu jest przerywany przez wyjątek. Wyrzucasz wyjątki, gdy napotkasz stan, którego nie możesz lub nie chcesz obsłużyć. Jesteś pewien, że właśnie tego chcesz tam robić? – Wormbo
Wyrzucanie wyjątków nie jest najlepszym sposobem komunikowania się z użytkownikiem. – zubergu