2012-08-25 42 views
0

我有一個包含兩個構造函數的類 - 一個接受Date對象,其他嘗試根據給定的時間戳字符串創建一個日期對象。需要注意的是,轉換爲Date對象可能會引發異常。我得到'可能未被初始化的時間戳'錯誤。可變時間戳可能尚未初始化

第一個構造函數:

public Visit(Date timestamp) { 
    this.timestamp = timestamp; 
} 

第二個構造函數(即產生錯誤的):

public Visit(String timestamp) { 
    try { 
     this.timestamp = dateFormat.parse(timestamp); 
    } catch (ParseException ex) { 
     Logger.getLogger(Visit.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

我試着加入this.timestamp的初始化的try但這個finally聲明然後給出該變量可能已經被初始化的錯誤。

+0

this.timestamp是最終的。 – davidmontoyago

回答

3

如果你樂於使用默認值時,有一個例外,你可以這樣做:

Date temp = null; 
try { 
    temp = dateFormat.parse(timestamp); 
} catch (ParseException ex) { 
    Logger.getLogger(Visit.class.getName()).log(Level.SEVERE, null, ex); 
} 

this.timestamp = (temp == null ? <some default Date value> : temp); 

如果沒有,那麼你可以扔從你的構造異常。通常,如果構造函數的參數無效,則可以重新插入IllegalArgumentException例如。

+0

拋出IllegalArgumentException異常完美。謝謝。 – jSherz

1

或者你可以使構造函數「拋出」的例外,例如:

public ToDelete(Date date) throws Exception { 
    this.date = this.getDate(); //getDate throws the Exception 
} 
1

我試着加入this.timestamp到嘗試的最後聲明初始化但這然後給出該變量可能已經被初始化的錯誤。

這是因爲最終成員變量必須在構造函數的所有代碼路徑中初始化,並且只能初始化一次。避免這種情況的唯一方法是將解析邏輯與作業分離。