我创建了自己的异常类型,并希望在方法中实现它。到目前为止,我已经用以下方式编写了它,并且它可以工作。
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;
}
我想知道的是,这是最好的方法,还是有其他更合适/更有效/更正确的方法。而且,我是否需要在方法标题中声明异常?
提前致谢。
答案 0 :(得分:0)
我不打算评论是否使用已检查与未检查的异常,因为这会引发争议。
如果创建已检查的异常,则必须在方法签名中抛出异常。如果您创建未经检查的,例如从RuntimeException
延伸,然后您不需要将其放在方法签名中。
已检查的异常通常是可恢复的异常。 未经检查的异常无法恢复。
答案 1 :(得分:0)
如果除了错误消息之外还有其他信息与异常一起发送。
您需要先创建例外对象
设置要在异常中抛出的值
或者你可以为Exception编写自己的构造函数,它将采用不同的值和异常消息来创建你想要抛出的异常的对象。
就这样
throw new NoSuchEmployeeException(/*"Employee could not be found"*/);
很好
答案 2 :(得分:0)
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
应该保留用于不可恢复的错误。