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