我正在尝试使用抽象日历来获取不同时间跨度的日期。我得到了抽象日历类,我定义了一个新的日历和两个方法。
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类返回nullfinal Calendar cal = super.getInitial();
我是编程新手,抽象编程仍然让我很难...我错了什么,我需要改变什么?
答案 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。对我来说,它没有给NPE。但逻辑是由你决定的。