2010-03-25 121 views
0

Java中是否存在某種異常來捕獲無效的Date對象?我試圖在下面的方法中使用它,但我不知道尋找什麼類型的異常。它是一個ParseException。Java Date異常處理try catch

public boolean setDate(Date date) { 
     this.date = date;     
     return true; 
    } 

回答

3

在您提供的方法中,無法捕獲異常,因爲沒有簡單的賦值操作會拋出異常。你所能做的只是下面的變化:

if(date == null) return false; 

但即使這不是優雅。你可能想要用this.date做一些事情,或者如果這是所需的行爲就拋出異常。

你真正追求的是兩種:

  1. ParseException - 由SimpleDateFormat構造拋出,再 - 由當它試圖parse()一個DateFormat對象,這將您所設定的方法之前發生
  2. IllegalArgumentException拋出它會在你設置的方法之前發生。表示您提供的格式字符串無效。

你想趕上其中一個(可能#1)。但在之前必須發生您的方法調用。一旦你有一個Date對象,它可以是null或有效。

2

在這種方法中,不需要擔心異常。該日期已經在您進入此方法時創建。如果你正在解析一個日期,它會在這段代碼之外完成。最好的辦法是確保日期不爲空。

3

這可能與原始問題沒有關係。但是您必須注意方法名稱,它是setDate()。你覺得它聽起來像會回報什麼嗎?或者如果可能的話,那麼你認爲在那裏返回boolean是個好主意嗎?國際海事組織,做這樣的事情,

public void setDate(Date date) { 
    this.date = date;     
} 

public boolean isDateNull() { // or something 
    return this.date == null;     
} 
2

這取決於你的意思是一個無效的日期。你是否想給我們一個看起來更像這樣的方法簽名?

public void setDate(String date) throws ParseException { 
    this.date = SomeDateFormat.getInstance().format(date); 
} 

否則,別人說指定Java日期對象的場的簡單的行爲,因爲它要麼是日期的一個實例已經或null不應該例外。

如果您只是想將字符串解析爲java.util.Date,請查看DateFormat,FastDateFormat(apache,線程安全)或Joda Time。