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

时间:2012-04-17 12:21:27

标签: java

我有一个类TimeParameter,它实际上并不是Date的子类,而是由Date和其他东西组成。在我的背景下,日期或经常表示为双打(朱利安日期)。通常,TimeParameter不与TimeParameter进行比较,而是与Date,Double或甚至String(使用预定义格式编码的日期)进行比较。最初,TimeParameter实现了Comparable接口,而在compareTo(Object 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实现Comparable< CompareHelper>并继续进行。

但我的问题是,在没有辅助类的泛型中是否有办法做到这一点,因为调用实例并不总是能够知道它应该将Date / Double包装成一个帮助器实例。

提前致谢

1 个答案:

答案 0 :(得分:2)

通常所有类型都有一个共同的界面,他们都实现了。与许多没有任何共同点的东西相比,没有任何意义。

BTW:a.compareTo(b)== -b.compareTa(a)意味着你不能过于复杂地与你所比较的类型。