![](/img/trans.png)
[英]Java: What is the proper way to declare an interface method that can throw an exception?
[英]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中实现了Comparable和compareTo
方法,则您的代码将更加高效-
@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.