我尝试编写一个泛型类,将两个对象与相同类型进行比较。这门课会让我得到两者中最小的一个。我的代码不起作用。
public class compare < T > {
private T type1;
private T type2;
public compare(T type1, T type2) {
this.type1 = type1;
this.type2 = type2;
}
public T getSmallest() {
if (type1 > type2) {
return type2;
} else if (type1 == type2) {
return 0;
} else {
return type1;
}
}
}
代码的主要问题是比较运算符 <
和 >
仅针对基元算术类型(字符、字节、短整型、整型、长整型、浮点数和双精度数(定义。 不能将这些运算符应用于任意引用(非基元(类型,并且泛型类型参数必须是引用类型。
您似乎正在尝试重新发明Comparator
和Comparable
接口。仅当引用类型实现Comparable<T>
接口并提供compareTo()
方法或使用实现Comparator<T>
的帮助程序类时,才能"比较"引用类型以进行排序(即更大/更小(。 在第一种情况下(implements Comparable<T>
(,类本身根据其内部状态以任何适当的术语定义比较;在第二种情况下,比较是在帮助程序implements Comparator<T>
类中指定的,基于帮助程序可见的任何内部状态。
有关更多详细信息,请查看 Oracle Java 教程的对象排序部分。
要扩展上述注释,您应该为您希望能够与 T 类型的其他对象进行比较/排序的任何类 T 实现 Compare。该接口只有一个必须实现的方法,即 compareTo
函数,它应返回负值、正值或零值。然后,当 T 实现 Comparable 时,可以在 T 的泛型类中使用此函数。
https://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html
你应该实现 Comparable 但 getSmallest 也应该成为 compareTo(T o( 方法。
查看javadoc的接口:https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html