【发布时间】:2020-06-02 08:15:37
【问题描述】:
我是泛型新手,不知道如何正确比较两个 Comparable 对象。
private int getSortPos(int dir, Comparable d1, Comparable d2) {
if (d1 == null && d2 != null)
{
return dir * -1;
}
else if (d1 != null && d2 == null)
{
return dir;
}
else if (d1 == null)
{
return 0;
}
else
{
return dir * d1.compareTo(d2);
}
}
我正在使用此代码来比较 String 和 Date 对象,它们都扩展了 Comparable。我在 IntelliJ 中使用声纳,它告诉我:“为此泛型提供参数化类型”,指的是函数参数。该代码按预期工作,但具有“主要代码气味”。这样做的正确方法是什么?
【问题讨论】:
-
你很可能想要
private <T> int getSortPos(int dir, Comparable<T> d1, Comparable<T> d2) { ... }。 -
顺便说一下,
compareTo并不总是返回 -1、0 或 1。它可以返回任意正数/负数。
标签: java generics parameters compare