抽象日历返回null

时间:2015-08-12 09:42:36

标签: java oop calendar abstract

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

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();
}

}

然后课程为一个月的时间跨度

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() {

}

}

最后,我打电话给我的程序主要课程。

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

程序在

点的MonthThreshold类返回null
final Calendar cal = super.getInitial();

我是编程新手,抽象编程仍然让我很难...我错了什么,我需要改变什么?

1 个答案:

答案 0 :(得分:1)

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

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

这里我贴了代码来避免NPE。对我来说,它没有给NP​​E。但逻辑是由你决定的。