抽象日历返回 null

Abstract Calendar returning null

我正在尝试获取抽象日历以获取不同时间跨度的日期。我得到了抽象日历 class,我在其中定义了一个新的日历和两个方法。

public abstract class AbstractThreshold {

private Calendar cal;

public abstract Calendar getStartDate();
public abstract Calendar getEndDate();
public abstract void calculateThreshold();

protected void DateThreshold(final Date date) {
    this.cal = Calendar.getInstance();
    this.cal.setTime(date);
}

protected Calendar getInitial() {
    return (Calendar) this.cal.clone();
}

}

然后class一个月的时间跨度

public class MonthThreshold extends AbstractThreshold{

@Override
public Calendar getStartDate() {
    final Calendar cal = super.getInitial();
    cal.set(Calendar.DAY_OF_MONTH,Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH));
    return (Calendar) cal;
}

@Override
public Calendar getEndDate() {
    final Calendar cal = super.getInitial();
    cal.set(Calendar.DAY_OF_MONTH,Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH));
    return (Calendar) cal;
}

@Override
public void calculateThreshold() {

}

}

最后我在我的程序的主要 class 中调用了那些。

MonthThreshold mt = new MonthThreshold();
firstTime = unparsedDate.format(mt.getStartDate());
secondTime = unparsedDate.format(mt.getEndDate());

程序 returns 在点

的 MonthThreshold class 处为空
final Calendar cal = super.getInitial();

我是编程新手,抽象编程仍然对我打击很大...我做错了什么,我需要更改什么?

您正在 void DateThreshold() 方法中以及调用此 DateThreshold 的位置初始化日历。您正在调用 cal.getInitial() 来获取日历的克隆。显然日历没有在 getInitial() 中初始化。使用 DateTHreshod() 获取日历实例。

protected Calendar getInitial() {
        this.cal = Calendar.getInstance();
        this.cal.setTime(new Date());
        return (Calendar) this.cal.clone();
    }

这里我粘贴了避免NPE的代码。对我来说,它不给 NPE。但逻辑取决于你。