掩码对象,用于扩展 java.util.Date 从返回 true 与实例



我有一个从java.util.Date扩展的类。但是我需要确保条件instanceof Date返回false。这可能吗?原因是因为我需要覆盖我正在集成的框架的功能,如果对象类型为 Date,它将更改对象的行为。

import java.io.Serializable;
import java.util.Date;
public abstract class KronosDateTime extends Date implements Serializable {
public KronosDateTime(final long time) {
super(time);
}
public KronosDateTime() {
super();
}
public abstract double toDoubleValue();
}

public final class KronosDateTimeImpl extends KronosDateTime {
public KronosDateTimeImpl() {
this(System.currentTimeMillis(),true);
}
}
public final class Kronos {
public static KronosDateTime call(PageContext pc) {
KronosDateTimeImpl dateTime = new KronosDateTimeImpl(pc);
System.out.println(dateTime instanceof java.util.Date); // Should return false
return dateTime;
}
}

不,不使用extends.根据定义,扩展另一个类的类的实例是两个类的实例。

但您可以改用合成:

class KhronosDateTime /* doesn't extend Date */ {
private final Date date;
KhronosDateTime(long time) {
this.date = new Date(time);
}
// Whatever methods using date.
}

不可能(给定当前代码(。

通过说A extends B你说A的任何实例也是B的实例

因此,instanceof检查将始终返回 true。当然,您的代码可以避免该检查,并按照 Eran 的建议进行操作。但没有什么能阻止其他人使用实例。

因此,这里真正的答案是:了解继承意味着什么。你不能吃蛋糕,但仍然吃它。日期类要么延长日期,要么延长日期。

相关内容

  • 没有找到相关文章

最新更新