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 должны быть зарезервированы для неисправимых ошибок.

Другие вопросы по тегам