Невозможно переопределить метод сравнения () Comparator

Я не уверен, почему я получаю эту ошибку ниже, хотя я уже реализовал метод.

"Метод сравнения (Student, Student) типа NameComparator должен переопределить или реализовать метод супертипа" в NameComparator.java при реализации метода сравнения

Student.java

public class Student {
    private String name;
    private int age;
    private String lesson;
    private int grade;

    public Student() {
    }

    public Student(String name, int age, String lesson, int grade) {
        super();
        this.name = name;
        this.age = age;
        this.lesson = lesson;
        this.grade = grade;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getLesson() {
        return lesson;
    }

    public void setLesson(String lesson) {
        this.lesson = lesson;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    @Override
    public String toString() {
        return "[name=" + this.name + ", age=" + this.age + ", lesson="
                + this.lesson + ", grade=" + this.grade + "]";
    }

}

NameComparator.java

import java.util.Comparator;

@SuppressWarnings("rawtypes")
public class NameComparator implements Comparator {

// I’m getting this error for below method "The method compare(Student, Student) of type NameComparator must override or implement a super type method"

    @Override
    public int compare(Student s1, Student s2) {
        String name1 = o1.getName();
        String name2 = o2.getName();

        // ascending order (descending order would be: name2.compareTo(name1))
        return name1.compareTo(name2);
    }

}

3 ответа

Решение

+ Изменить

public class NameComparator implements Comparator {

в

public class NameComparator implements Comparator<Student> {

Когда вы реализуете сырье Comparator интерфейс (который не рекомендуется), ваш compare метод ожидает Object аргументы.

Comparator<T> Интерфейс является универсальным интерфейсом. Как и было принято реализация по умолчанию Comparator<Object>, что будет означать, что он ожидает public int compare(Object s1, Object s2) { быть реализованным.

Чтобы это исправить, просто замените Comparator с Comparator<Student> в твоем классе decleration.

Объявление метода должно выглядеть так:

@Override
public int compare(Object s1, Object s2) {

Потому что вы не добавляете универсальный тип в implements пункт.

Измените объявление класса на:

public class NameComparator implements Comparator<Student> {

И ошибка исчезнет.

Другие вопросы по тегам