簡體   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