Java在方法中抛出异常的最佳方法

时间:2013-11-20 20:47:59

标签: java exception methods throw

我创建了自己的异常类型,并希望在方法中实现它。到目前为止,我已经用以下方式编写了它,并且它可以工作。

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 个答案:

答案 0 :(得分:0)

我不打算评论是否使用已检查与未检查的异常,因为这会引发争议。

如果创建已检查的异常,则必须在方法签名中抛出异常。如果您创建未经检查的,例如从RuntimeException延伸,然后您不需要将其放在方法签名中。

已检查的异常通常是可恢复的异常。 未经检查的异常无法恢复。

答案 1 :(得分:0)

如果除了错误消息之外还有其他信息与异常一起发送。

您需要先创建例外对象

设置要在异常中抛出的值

或者你可以为Exception编写自己的构造函数,它将采用不同的值和异常消息来创建你想要抛出的异常的对象。

就这样

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

很好

答案 2 :(得分:0)

1 如果您在Worker中实施ComparablecompareTo方法,您的代码会更有效 -

@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>),尤其是remove方法。

2 您应该只返回null。投掷Exception肯定是您的选择,但是(IMO)未经检查的Exception应该保留用于不可恢复的错误。