[英]Trouble implementing the comparable interface
我不斷收到錯誤消息:Student不是抽象的,並且沒有覆蓋java.lang.Comparable中的抽象方法compareTo(java.lang.Object)
為什么是這樣? 這是要完成的工作,是列出學生名單,並按GPA進行比較。
public class Student implements Comparable
{
private String name;
private double gpa;
public Student(String name, double gpa)
{
this.name = name;
this.gpa = gpa;
}
public String getName()
{
return name;
}
public double getGpa()
{
return gpa;
}
public String toString()
{
return "Name: " + name + " GPA: " + gpa;
}
public double compareTo(Object other)
{
Student filler = (Student)other;
if(this.getGpa() < filler.getGpa())
return -1;
else if(this.getGpa() == filler.getGpa())
return 0;
else
return 1;
}
}
public double compareTo(Object other)
應該
@Override
public int compareTo(T other)
看一下Comparable
接口。 它需要一個名為compareTo
的方法,該方法采用類型T
(通用參數)的參數, 並返回一個int
。 您創建的方法未實現接口中指定的方法,這就是Java編譯器抱怨的原因。
由於Comparable
接口是泛型的,因此您應該利用泛型並使類實現Comparable<Student>
。 當您這樣做時, compareTo
的簽名變為:
@Override
public int compareTo(Student other)
這比原始Object
要好,因為您不必強制轉換,更重要的是,您不會意外地傳遞了不是Student
東西。
還有一件事:從接口實現方法時,請使用@Override
批注。 假設您使用的是中途的IDE,那么您將看到以下錯誤:
@Override
public double compareTo(Object other)
由於接口中沒有使用該簽名的方法。
要直接回答您的問題,您需要將compareTo()
的返回類型從double
更改為int
。
您還應該進行其他幾處修改以改進代碼:
實現Comparable<Student>
而不是Comparable
。 這樣就可以編寫public int compareTo(Student other)
並且只允許使用其他Student
引用調用compareTo()
。
在toString()
和compareTo()
之前添加@Override
批注。 此注釋可幫助您避免編譯器無法捕獲的一些常見錯誤。
compareTo方法返回一個int
而不是double
。
另外,使用Override
注釋有助於確保正確覆蓋該方法。 所以改變這個
public double compareTo(Object other)
至
@Override
public int compareTo(Object other)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.