![](/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.