Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义类扩展日期的Java向下转换-运行时错误_Java_Android_Casting - Fatal编程技术网

自定义类扩展日期的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)