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

mhd8tkvw  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(344)

我有一个有两个构造函数的类-一个接受一个 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.timestampfinally 会议声明 try 但这会产生一个错误,即变量可能已经初始化。

monwx1rj

monwx1rj1#

我尝试将this.timestamp的初始化添加到try的finally语句中,但这会导致一个错误,即变量可能已经初始化。
这是因为最后一个成员变量必须在构造函数的所有代码路径中初始化,并且只能初始化一次。避免这种情况的唯一方法是将解析逻辑与赋值解耦。

sbtkgmzw

sbtkgmzw2#

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

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

5kgi1eie3#

如果您愿意在出现异常时使用默认值,可以执行以下操作:

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 例如。

相关问题