java:绑定不匹配:使用比较器时出错

vojdkbi0  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(308)

我尝试了一个小代码,使用比较排序的学生名单,通过那里的卷号。但我在这行得到编译时错误:

Collections.sort(l);

在我的测试代码下面:

package test;

     import java.util*;

      public class StudentUsingComparator implements
                    Comparator<StudentUsingComparator> {

        int roll;
        String name;

        public StudentUsingComparator(int roll, String name) {
                    this.name = name;
                    this.roll = roll;
        }
        @Override
        public int compare(StudentUsingComparator s1, StudentUsingComparator s2) {
                    return s1.roll - s2.roll;

        }

        public static void main(String[] args) {
                StudentUsingComparator student1 = new StudentUsingComparator(10, "ab");
                StudentUsingComparator student2 = new StudentUsingComparator(30, "cd");
               StudentUsingComparator student3 = new StudentUsingComparator(20, "bc");

              List<StudentUsingComparator> l = new ArrayList<StudentUsingComparator>();
               l.add(student1);
               l.add(student2);
               l.add(student3);
               System.out.println("unsorted collection is:  " + l);
               Collections.sort(l);   //m getting error in this line
               System.out.println("sorted collection is:  " + l);
        }
   }

错误消息显示:
绑定不匹配:集合类型的泛型方法sort(list)不适用于参数list()。推断类型studentusingcomparator不是有界参数的有效替代品>

arknldoa

arknldoa1#

你搞糊涂了 Comparable<> 以及 Comparator<> . 具有内在顺序的类应该实现 Comparable<> ,则可以使用 Collecections.sort(l) . 当你使用 Collections.sort(l,c) , c 应该实施 Comparator<> ,它定义了不同于内部的外部顺序。

kpbwa7wx

kpbwa7wx2#

您的代码混合了两个概念:
您可以定义 Student 实现的类 Comparable ,则可以使用 Collections.sort(l) 分类 List<Student> l .
除了你的课 Student (可能是 Comparable 你定义了一个额外的类来实现 Comparator<Student> 使用 Collections.sort(l,c) 用一个 List<Student> l 和一个 Comparator<Student> c .
虽然理论上可以把这两种情况混合起来(就像你做的那样),然后 Student 实施 Comparator<Student> (然后继续沿着2的线)这是完全不允许的,因为你的物体有一个自然的顺序-那么你应该按照 Comparable 或者他们没有,那么定义顺序应该转到一个单独的 Comparator -班级。

相关问题