可能尚未初始化可变时间戳

时间:2012-08-25 15:05:12

标签: java

我有一个带有两个构造函数的类 - 一个接受一个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的初始化添加到finally的{​​{1}}语句中,但这会产生错误,表明该变量可能已经初始化。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

或者你可以让构造函数“抛出”异常,例如:

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

答案 2 :(得分:1)

  

我已经尝试将this.timestamp的初始化添加到try的finally语句中,但这会产生一个错误,表明该变量可能已经初始化。

这是因为必须在构造函数的所有代码路径中初始化最终成员变量,并且必须仅初始化一次。避免这种情况的唯一方法是将解析逻辑与赋值分离。