我不知道如何比较2个可比较的对象而没有其他变量告诉我哪个更大。问题是:创建一个名为Max的类,该类提供一个称为max的类方法。 max对可以比较的对象采用两个参数,即,实现了上面所示的Java 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:类不应实现Comparable:预期[false]但找到[true]
那是错误之一。但是我也需要编写compareTo方法的帮助。
答案 0 :(得分:0)
我删除了之前的答案,因为我想,恕我直言,您已经使这一问题变得复杂了。由于max
的两个参数已经实现了Comparable<T>
接口,因此您所要做的就是将其称为:
int ret = first.compareTo(second);
然后根据ret
的值像您一样先返回第一个或第二个。这样,您无需了解其实现方式。也许您可以从您的老师或从事此工作的其他人那里得到一些澄清(我想这是为一项作业)。
创建一些实现该接口的测试类对您来说是值得的。您可以组成一些代表大小的变量。
答案 1 :(得分:0)
您的问题的关键字是泛型。您可能需要做一些研究并阅读一些相关内容。看下面的例子。为了简化起见,我将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。