Java:如果与两种或两种以上类型的对象相比较,则可以使用泛型实现

Java:如果与两种或两种以上类型的对象相比较,则可以使用泛型实现,java,Java,我有一个类TimeParameter,它实际上不是Date的子类,而是由Date和其他东西组成的。在我的上下文中,日期或日期通常表示为双倍(朱利安日期)。非常常见的情况是,TimeParameter不是与TimeParameter比较,而是与日期、Double甚至字符串(使用预定义格式编码的日期)比较。最初,TimeParameter实现了Comparable接口,在compareTo(对象o)中,o用于进一步分叉 if ( o instanceof Date) return compa

我有一个类TimeParameter,它实际上不是Date的子类,而是由Date和其他东西组成的。在我的上下文中,日期或日期通常表示为双倍(朱利安日期)。非常常见的情况是,TimeParameter不是与TimeParameter比较,而是与日期、Double甚至字符串(使用预定义格式编码的日期)比较。最初,TimeParameter实现了Comparable接口,在compareTo(对象o)中,o用于进一步分叉

if ( o instanceof Date)
    return compareToDate((Date)o);
else if ( o instanceof Double)
    return compareToDouble((Double)o);
else ...
使用泛型实现这一点的一种可能性是使用像

CompareHelper(Double d) {
    jd = d;
    ...
}
CompareHelper(Date d) {
    jd = getJulianDate(d);
    ...
}
然后,使TimeParameter实现可比较,并以同样的方式进行

但我的问题是,在没有helper类的泛型中是否有这样做的方法,因为调用实例并不总是能够知道它应该将Date/Double包装到helper实例中


提前感谢

通常所有类型都有一个它们都实现的通用接口。与许多没有共同点的事物相比是没有意义的


顺便说一句:a.compareTo(b)=-b.compareTo(a)意味着您对要比较的类型不会太复杂。

我是否正确认为,无论时间如何存储在
TimeParameter
中,它都应该与任何其他类型的时间规范(日期、双精度、字符串)相比较?如果是这样的话,我认为您的第一个(非泛型)实现是最好的。有几件事:首先,您的CompareHelper不是泛型类,而是另一个从其他时间类转换为标准时间类(jd)的时间类,我不确定泛型是否是正确的解决方案。其次,随着解决方案的发展,解决方案的实例并不坏(也许不美观,但也不错)。第三,当您在代码中使用多种方式来表示相同的信息(时间/日期)时,这(对我来说)意味着发生了一些异味——在这方面,我可能建议您看看最近在Java中处理日期/时间的尝试:例如jodaTime或jsr310