如何为任何类型的可比较对象实现 compareTo



我不知道如何在没有其他变量告诉我哪个更大的变量的情况下比较 2 个可比较的对象。问题是:创建一个名为 Max 的类,该类提供一个名为 max.max 的单个类方法,将两个参数用于可以比较的对象,即实现如上所示的 Java Comparable 接口。它返回对较大者的引用。如果两个对象相等,则应返回第一个对象。Comparable 的实现方式取决于每个类,您的方法将在多个不同类型的对象上调用。

它在界面中提供了 int compareTo(对象其他(方法,但我找不到解决方案。

public class Max implements Comparable 
{
    public int compareTo(Object other)
    {
    }
    public static Comparable max(Comparable first, Comparable second)
    {
        int fi = first.compareTo(second);
        if(fi >0)
            return first;
        else if (fi<0)
            return second;
        return first; 
    }
}

java.lang.AssertionError: 类不应该实现 可比性: 预期 [false] 但找到 [true]

这是错误之一。但我也需要帮助编写 compareTo 方法。

我删除了我之前的答案,因为我认为,恕我直言,你把这个问题复杂化了。 由于要max的两个参数已经实现了Comparable<T>接口,因此您所要做的就是将其调用为:

int ret = first.compareTo(second);

然后像您一样根据 ret 的值返回第一个或第二个。 这样,您无需了解其实施方式。 也许你可以从你的老师或其他正在研究这个问题的人那里得到一些澄清(我想这是为了一项作业(。

对于

您来说,创建一些实现接口的测试类是值得的。 你可以组成一些表示大小的变量。

您问题的关键字是泛型。你可能想做一些研究并阅读一些关于它的东西。请看以下示例。我已经将类Max实现为静态类以保持简单:

import java.time.LocalDate;
public class MyTestClass{ 
    public static void main(String args[]) {
        Integer i = 16;
        Integer j = 15;
        Integer m = Max.max(i, j);
        System.out.println(m);
        String k = "aaaa";
        String n = "zzzz";
        String s = Max.max(k, n);
        System.out.println(s);
        LocalDate d = LocalDate.now();
        LocalDate e = LocalDate.now().plusDays(2);
        LocalDate f = Max.max(d , e);
        System.out.println(f);
    }
    static class Max{
        public static <T extends Comparable> T max(T first, T second) {            
            if (first.compareTo(second) >= 0)
                return first;
            else
                return second;
        }
    }
}

如您所见,有一个类 Max,它只有一个方法 max,它接受两个对象,例如两个整数、两个字符串或两个日期对象。

由于所有这些类都实现了类似的接口,因此您可以对所有对象类型使用 max 方法。然后,编译器在运行时决定调用哪个comapreTo方法,即类Integer,String,LocalDate或其他任何类的compareTo。

最新更新