我想比较一个名为CalendarDate的新类。我创建了一个可比较的接口,并使公共类CalendarDate实现Comparable。我还在类中编写了compareTo(CalendarDate Other)方法。
然而,当我尝试 Collections.sort (生日)时,它表示绑定不匹配。 (它有详细信息:绑定不匹配:类型集合的泛型方法排序(List)不适用于参数(ArrayList)。推断类型CalendarDate不是有界参数的有效替代品>)
我的代码出了什么问题?感谢。
P.S。 CalendarDateTest.java中的 sort 一词下面有一条RED行。
Comparable.java
package Chapter10;
public interface Comparable<T> {
public int compareTo(T other);
}
CalendarDate.java
package Chapter10;
public class CalendarDate implements Comparable<CalendarDate> {
private int month;
private int day;
public CalendarDate(int month, int day) {
this.month = month;
this.day = day;
}
public int compareTo(CalendarDate other) {
if (month != other.month) {
return month - other.month;
}
else {
return day - other.day;
}
}
public String toString() {
return month + "/" + day;
}
}
CalendarDateTest.java
package Chapter10;
import java.util.*;
public class CalendarDateTest {
public static void main (String[] args) {
ArrayList<CalendarDate> birthday = new ArrayList<CalendarDate>();
birthday.add(new CalendarDate(1, 23));
birthday.add(new CalendarDate(5, 18));
birthday.add(new CalendarDate(12, 17));
birthday.add(new CalendarDate(2, 29));
birthday.add(new CalendarDate(8, 6));
System.out.println("birthdays = " + birthday);
Collections.sort(birthday);
System.out.println("birthdays = " + birthday);
}
}
答案 0 :(得分:0)
问题是你已经重新定义了Java已定义的Comparable<T>
接口。就Java而言,尽管具有相同的名称,但它们是两个完全不同的,不相关的接口。 Collections.sort
方法了解java.lang.Comparable<T>
,但不知道您的Chapter10.Comparable<T>
。
从项目中删除Comparable.java文件,重新编译并运行;这应该解决问题。
答案 1 :(得分:0)
您必须使用java.lang.Comparable<T>
界面而不是您自己的实现。
如果您仍然希望使用自己的扩展功能接口,则接口必须扩展java.lang.Comparable<T>
接口。但请注意,对于使用Collections.sort()
方法,这没有任何区别。
提示:为了确保覆盖现有方法,您应该向@Override
和compareTo()
添加toString()
注释。