java - 错误 : Bound mismatch, Collections.sort、接口(interface)、compareTo 方法

标签 java arraylist interface

我想比较一个名为 CalendarDate 的新类。我创建了一个 Comparable 接口(interface),并让公共(public)类 CalendarDate 实现了 Comparable。我还在类中编写了一个compareTo(CalendarDate Other)方法。

但是,当我尝试Collections.sort(生日)时,它显示“绑定(bind)不匹配”。 (它有详细信息:绑定(bind)不匹配:Collections 类型的泛型方法 sort(List) 不适用于参数 (ArrayList)。推断的类型 CalendarDate 不是绑定(bind)参数的有效替代>)

我的代码有什么问题吗?谢谢。

附注CalendarDateTest.java 中的单词 sort 下有一条红线。

比较.java

package Chapter10;

public interface Comparable<T> {
    public int compareTo(T other);
}

日历日期.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);
    }
}

最佳答案

问题是您重新定义了 Comparable<T> Java已经定义了接口(interface)。就 Java 而言,尽管名称相同,但这是两个完全不同、不相关的接口(interface)。 Collections.sort方法知道java.lang.Comparable<T> ,但它不知道你的 Chapter10.Comparable<T> .

从项目中删除 Comparable.java 文件,重新编译并运行;这应该可以解决问题。

Running demo on ideone.

关于java - 错误 : Bound mismatch, Collections.sort、接口(interface)、compareTo 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22910673/

相关文章:

java - 我应该使用泛型来解决这个问题吗?

java - 实现一个调用接口(interface)方法的类?

用于进行电话录音的 Java 库

java - 在 MongoDB Java 中过滤文档或子文档中的数组

java - Java非堆内存和栈内存有什么区别?如果不是,它们是否相同?它们之间有什么区别?

java - 为什么我的方法只返回 ArrayList 中存在的重复项之一?

java - 创建异常 : java. lang.OutOfMemoryError

java - 用逗号分隔数组列表中的字符 java

java - 错误: compareTo(Object) in Car cannot implement compareTo(T) in Comparable

java - 为什么 ArrayAdapter 中的原始数组项也会被删除?