簡體   English   中英

難以實現可比的接口

[英]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

您還應該進行其他幾處修改以改進代碼:

  1. 實現Comparable<Student>而不是Comparable 這樣就可以編寫public int compareTo(Student other)並且只允許使用其他Student引用調用compareTo()

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM