Java 无法重写Comparator的compare()方法

Java 无法重写Comparator的compare()方法,java,comparator,Java,Comparator,虽然我已经实现了这个方法,但我不确定为什么会出现下面的错误 在实现比较方法时,NameComparator.java中的“类型为NameComparator的方法compare(Student,Student)”必须重写或实现超类型方法 Student.java NameComparator.java 改变 public class NameComparator implements Comparator { 到 公共类NameComparator实现Comparator{ 当您实现原始比较

虽然我已经实现了这个方法,但我不确定为什么会出现下面的错误

在实现比较方法时,NameComparator.java中的“类型为NameComparator的方法compare(Student,Student)”必须重写或实现超类型方法

Student.java NameComparator.java 改变

public class NameComparator implements Comparator {

公共类NameComparator实现Comparator{
当您实现原始
比较器
接口时(这是不建议的),您的
比较
方法需要
对象
参数。

该接口是一个通用接口。它采用了
比较器
的默认实现,这意味着它需要
公共整数比较(对象s1,对象s2){
待实现


要解决此问题,只需在类declaration中将
Comparator
替换为
Comparator

方法声明必须如下所示:

@Override
public int compare(Object s1, Object s2) {
因为您没有在
implements
子句中添加泛型类型

将类声明更改为:

public class NameComparator implements Comparator<Student> {
公共类NameComparator实现Comparator{

错误将消失。

implements
部分更改为
implements Comparator
您认为
@SuppressWarnings(“rawtypes”)
?为什么添加它?当比较器未参数化时,我收到此警告“比较器是原始类型。对泛型类型比较器的引用应参数化”用于实现比较器接口。因此,为了抑制此警告,添加了。这可能是一种愚蠢的编程:)#Boris the SpiderWell,这正是导致您的错误的原因,不是吗?如果您阅读了错误的含义,您会发现您的
比较器
需要一个泛型类型才能正常工作。这里要学习的课程是阅读并完全理解编译器警告,而不是忽略它们。人们是这么说的吗“Java泛型是不变的”,这意味着如果代码没有显式地使用
符号,那么总是调用
对象
方法(
Any?
,在Kotlin中)?@MinhNghĩa,是的。如果需要
,但没有提供任何内容,则使用
public class NameComparator implements Comparator<Student> {
@Override
public int compare(Object s1, Object s2) {
public class NameComparator implements Comparator<Student> {