繁体   English   中英

Java在方法中引发异常的最佳方法

[英]Java Best way to throw exception in a method

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

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

我想知道的是,这是否是最好的方法,或者是否还有其他更合适/有效/正确的方法。 而且,我是否需要在方法标题中声明异常?

提前致谢。

我将不评论是否使用检查与非检查异常,因为这将引起一场激烈的辩论。

如果创建一个检查异常,则必须将其引发到方法签名中。 如果创建了一个未选中的对象,例如从RuntimeException扩展,则无需将其放入方法签名中。

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

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

您将需要首先创建异常的对象

设置要抛出的异常值

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

因此

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

很好

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以保留不可恢复的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM