Java Best way to throw exception in a method

不打扰是莪最后的温柔 提交于 2020-06-09 06:19:11

问题


I have created my own type of exception and want to implement it in a method. As of now I have written it in the following way, and it works.

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;
}

What I would like to know is if this is the best way to do it or if there is any other more appropriate/efficient/correct way of doing it. And also, do I need to declare the exception in the method header?

Thanks in advance.


回答1:


I'm not going to comment on whether or not to use checked vs unchecked exceptions as that will provoke a monster debate.

If you create a checked exception, then yes it must be thrown in the method signature. If you create an unchecked e.g. extends from RuntimeException then you do not need to throw it in the method signature.

Checked exceptions are generally exceptions that are recoverable. Unchecked exception are irrecoverable.




回答2:


In case you have some other information other than error message to be sent out along with the exception.

You will need to first create the Object of the Exception

set values you want to throw in the Exception

Or you can write your own constructors for the Exception which would take different values and exception message to create object to the Exception you wanna throw.

As such

throw new NoSuchEmployeeException(/*"Employee could not be found"*/);

is fine




回答3:


1 Your code would be more efficient if you implemented Comparable and the compareTo method in Worker as follows -

@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;
}

And then use the SortedSet collection type (e.g. TreeSet<Worker>), especially the remove method.

2 You should probably just return null. Throwing an Exception is certainly your choice, but (IMO) an unchecked Exception should be reserved for unrecoverable errors.



来源:https://stackoverflow.com/questions/20106675/java-best-way-to-throw-exception-in-a-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!