gpt4 book ai didi

java - 覆盖字段初始化

转载 作者:行者123 更新时间:2023-12-01 08:11:55 25 4
gpt4 key购买 nike

对于以下示例,

public abstract class RecordData {
private MyDate mDate = new MyDate(new SimpleDateFormat(""yyyy-MM-dd HH:mm:ss"));

public Date getMyDate() {
return mDate.getDate();
}
.....
}

我想实现类来覆盖日期格式。执行此操作的一种方法是使用如下方法:

protected SimpleDateFormat getDateForm() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
}

所以,初始化应该是这样的: MyDate mDate = new MyDate(getDateForm());

还有其他方便的方法吗?上述实现可能存在哪些潜在问题。

最佳答案

这样做是一个非常糟糕的主意:您的基类将在其构造函数中调用子类的方法,从而调用尚未初始化的对象上的方法。您最好在其构造函数中传递父类(super class)所需的所有数据:

public abstract class RecordData {
private MyDate mDate;

protected RecordData(String datePattern) {
this.mDate = new MyDate(new SimpleDateFormat(datePattern));
}
}

按照别人的建议去做将完全打破这样的基本实现:

public class SubRecordData extends RecordData {
private SimpleDateFormat dateFormat;

public SubRecordData(String pattern) {
this.dateFormat = new SimpleDateFormat(pattern);
}

// broken: when this method is called by the base class constructor,
// dateFormat is still null
@Override
protected SimpleDateFormat getDateFormat() {
return dateFormat;
}
}

关于java - 覆盖字段初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16623865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com