自定义类扩展日期的Java向下转换-运行时错误
我有一门课是这样的:自定义类扩展日期的Java向下转换-运行时错误,java,android,casting,Java,Android,Casting,我有一门课是这样的: public class DateS extends Date { public DateS yesterday(){ Calendar cal = Calendar.getInstance(); cal.setTime(this); cal.add(Calendar.DAY_OF_YEAR, -1); return (DateS) cal.getTime(); } } 它可以成功建造。在运行
public class DateS extends Date {
public DateS yesterday(){
Calendar cal = Calendar.getInstance();
cal.setTime(this);
cal.add(Calendar.DAY_OF_YEAR, -1);
return (DateS) cal.getTime();
}
}
它可以成功建造。在运行时,当我调用date.date()
时,无法将“java.util.date”强制转换为“myproject.package.DateS”
我需要知道为什么以及我能做些什么来解决这个问题。因为
日历
不生成日期
它使用了不同的日期
实现
为了强制转换为
日期
,对象必须是日期
的实例或该类的子对象。由于Calendar
不返回DateS
的实例,因此无法强制转换它。它可以很好地编译,因为从理论上讲,如果返回的日期是正确的类型,它就可以工作,而编译器无法判断。好吧,Calendar.getTime()
不会返回myproject.package.DateS
的实例,所以不能执行该转换。要修复它,您只需返回一个日期
,而不是日期
。在Swift上创建类的扩展时,您可以向其添加功能。Java中的等价物是什么?我如何才能直接向Date类添加新的属性和方法?@JorgeHenrique在java中没有与之等效的属性和方法。您可能需要在DateS
类中包装返回的Date
。然后,您可以委托并添加其他功能。顺便说一句,在java.time中,更简单地获取昨天:LocalDate.now(ZoneId.of(“America/Montreal”)。minusDays(1)