Java Лучший способ вызвать исключение в методе
Я создал свой собственный тип исключения и хочу реализовать его в методе. На данный момент я написал это следующим образом, и это работает.
public Worker remove (String firstName, String lastName, String number) throws NoSuchEmployeeException {
Worker w = null;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getFirstName().compareTo(firstName) == 0 &&
list.get(i).getLastName().compareTo(lastName) == 0 &&
list.get(i).getNumber().compareTo(number) == 0) {
w = list.get(i);
list.remove(i);
}
else
throw new NoSuchEmployeeException(/*"Employee could not be found"*/);
}
return w;
}
То, что я хотел бы знать, является ли это лучшим способом сделать это или есть какой-либо другой более подходящий / эффективный / правильный способ сделать это. А также, мне нужно объявить исключение в заголовке метода?
Заранее спасибо.
3 ответа
Я не собираюсь комментировать, использовать ли проверенные и непроверенные исключения или нет, так как это вызовет споры о монстрах.
Если вы создаете проверенное исключение, тогда да, оно должно быть брошено в сигнатуру метода. Если вы создаете непроверенный, например, простирается от RuntimeException
тогда вам не нужно бросать его в сигнатуру метода.
Проверенные исключения - это, как правило, исключения, которые можно восстановить. Непроверенные исключения не подлежат восстановлению.
Если у вас есть другая информация, кроме сообщения об ошибке, которое будет отправлено вместе с исключением.
Вам нужно будет сначала создать объект исключения
установить значения, которые вы хотите добавить в исключение
Или вы можете написать свои собственные конструкторы для Исключения, которые будут принимать разные значения и сообщение об исключении, чтобы создать объект для Исключения, которое вы хотите выбросить.
В качестве таких
throw new NoSuchEmployeeException(/*"Employee could not be found"*/);
Это хорошо
1 Ваш код был бы более эффективным, если бы вы реализовали Comparable и compareTo
Метод в Worker следующим образом -
@Override
public int compareTo(Object obj) {
// identity.
if (obj == this) {
return 0;
} else if (obj instanceof Worker) {
Worker w = (Worker) obj;
if (w.getNumber().compareTo(number) != 0) {
return w.getNumber().compareTo(number);
} else if (w.getLastName().compareTo(lastName) != 0) {
return w.getLastName().compareTo(lastName);
}
return w.getFirstName().compareTo(firstName);
}
return -1;
}
А затем используйте тип коллекции SortedSet (например, TreeSet<Worker>
), особенно метод удаления.
2 Вы, вероятно, должны просто вернуть ноль. Бросать Exception
это, конечно, ваш выбор, но (IMO) непроверенный Exception
должны быть зарезервированы для неисправимых ошибок.