2013-11-20 79 views
0

我已經創建了自己的異常類型並希望在方法中實現它。到目前爲止,我已經用以下方式編寫了它,並且它可以工作。Java在方法中拋出異常的最佳方式

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

如果你只是在尋找一個僱員,那麼你的方法應該返回'null'或'employee' *(如果找到)*,但它不應該拋出異常。 – Habib

+1

請將codereview.stackexchange.com用於此類問題,而不是StackOverflow。編寫代碼時,此站點存在問題。 –

+0

我認爲你是異常看起來不錯。對哈比來說,如果找不到員工是正常流量,那麼你就不應該拋出異常。 –

回答

0

我不打算評論是否使用checked與unchecked exceptions,因爲這會引發怪物辯論。

如果你創建一個檢查的異常,那麼是的,它必須拋出方法簽名。如果您創建了未選中的例如從RuntimeException延伸,那麼你不需要把它放在方法簽名中。

檢查異常通常是可以恢復的異常。 未經檢查的異常無法恢復。

+0

你應該,做個標準的,只拋出'RuntimeException'就是程序在異常後不能繼續。例如,'NullPointerException'是運行時,因爲程序不知道如何處理它,但未能連接到URL並不是一個大問題,因爲它可以繞過 - 如果需要連接,那麼你可以定義程序必須自行停止。 – Obicere

0

如果您有其他一些信息而不是錯誤消息與異常一起發送出去。

您需要首先創建例外的對象

設定值要在異常

扔或者你可以寫自己的構造函數,其將採取不同的價值觀和異常消息異常創建要拋出的異常對象。

這樣

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

是罰款

0

如果您實現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

你應該只是返回null。投擲Exception當然是您的選擇,但(IMO)未檢查Exception應保留爲不可恢復的錯誤。

相關問題