我想要一个很好的方法来从 java Date 对象获取当前的 unix 时间戳,这是我的解决方案:
public class Date extends java.util.Date {
public int getUnixTimeStamp() {
int unixtimestamp = (int) (this.getTime() * .001);
return unixtimestamp;
}
}
这工作正常,但问题是当我尝试将 java Date 对象转换为我的自定义日期类时,即:
Calendar foo = Calendar.getInstance();
foo.set(0, 0, 0, 12, 30);
myapp.Date foo2 = (myapp.Date)foo.getTime();
这会生成:线程“main”java.lang.ClassCastException中的异常:java.util.Date无法转换为myapp.Date
我明白为什么会出现这个异常,但是有没有办法将父类(super class)转换为子类?如果没有,你将如何实现 unixtimestamp 方法?我在我的应用程序中经常使用它。
最佳答案
您不能在子类中转换父类(super class),因为子类可能具有比父类(super class)更大的接口(interface),这意味着子类可以具有父类(super class)没有的诸如 getUnixTimeStamp() 之类的函数。在您的示例中,这意味着您尝试在 java.util.Date 上调用 getUnixTimeStamp。
您可以在此处使用委托(delegate)或组合来代替继承。
这意味着你有一个类(class)
public class Date {
private java.util.date date;
public Date(java.util.Date date) {
this.date = date
}
public int getUnixTimeStamp() {
int unixtimestamp = (int) ((this.date.getTime()) * .001);
return unixtimestamp;
}
}
通过这种方式,您不会将日期转换为围绕 java.util.date 创建类的日期。
如果您仅使用此函数,则创建一个返回更改日期的静态实用程序函数 getUnixTime(Date date) 可能是一个更简单的解决方案。
关于Java 类型转换和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/933037/