代码之家  ›  专栏  ›  技术社区  ›  Yamaha32088

扩展java.util.Date以使Instanceof不返回true的掩码对象

  •  1
  • Yamaha32088  · 技术社区  · 6 年前

    我有一个从JavaUTILDATE扩展的类。但是我需要确定 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;
        }
    }
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   Andy Turner    6 年前

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

    但你可以用构图代替:

    class KhronosDateTime /* doesn't extend Date */ {
      private final Date date;
    
      KhronosDateTime(long time) {
        this.date = new Date(time);
      }
    
      // Whatever methods using date.
    }
    
        2
  •  1
  •   GhostCat    6 年前

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

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

    因此 instanceof 检查将始终返回true。当然, 你的 代码可以避免这种检查,并按照eran的建议执行。但没什么能阻止 其他 使用Instanceof的人。

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