尽管实现了 Comparable 接口(interface),但 Java ClassCastException 错误

标签 java arrays classcastexception comparable

我正在做一个类(class)作业,它接受一个或多个学生的姓氏、名字和分数,将它们存储在一个数组中,然后按姓氏(如果姓氏相同则按名字)的字母顺序排序。 我们需要使用一个实现 Comparable 接口(interface)的 Student 类。 当我到达代码的 Arrays.sort 部分时,我收到一个 ClassCastException,指出“Student 无法转换为 java.lang.Comparable”。 我已经搜索和审查,尝试使用 implements Comparable<Student> ,清理并构建,但错误仍然存​​在。任何帮助或提示表示赞赏。

错误:

Exception in thread "main" java.lang.ClassCastException:
studentscoreapp.Student cannot be cast to java.lang.Comparable
at java.util.Arrays.mergeSort(Arrays.java:1144)
at java.util.Arrays.sort(Arrays.java:1079)
at studentscoreapp.StudentScoreApp.main(StudentScoreApp.java:35)
Java Result: 1 BUILD SUCCESSFUL (total time: 12 seconds)

这是我的学生类(class):

public class Student implements Comparable
{

private String lastName;
private String firstName;
private int score;

public Student(String fName, String lName, int s)
    {
    fName = firstName;
    lName = lastName;
    s = score;
    }

public String getLastName()
    {
    return lastName;
    }

public void setLastName(String lastName)
    {
    this.lastName = lastName;
    }

public String getFirstName()
    {
    return firstName;
    }

public void setFirstName(String firstName)
    {
    this.firstName = firstName;
    }

public int getScore()
    {
    return score;
    }

public void setScore(int score)
    {
    this.score = score;
    }

@Override
public int compareTo(Object obj)
    {
    Student sent = (Student) obj;
    if (sent.lastName.equals(this.lastName))
    {
    return this.firstName.compareToIgnoreCase(sent.firstName);
    }
    else return this.lastName.compareToIgnoreCase(sent.lastName);
    }

@Override
public String toString()
    {
    return lastName + firstName + score;
    }
}

可比较接口(interface):

public interface Comparable
{

int compareTo(Object obj);
}

和我的主要:

import java.util.Arrays;

公开课StudentScoreApp {

public static void main(String[] args)
    {
    String firstName;
    String lastName;
    int score;

    System.out.println("Welcome to the Student Scores Application");
    int numStudents = Validation.getInt("Enter # of Students: ");
    Student[] studentArray = new Student[numStudents];

    int i;
    for (i = 0; i < numStudents; i++)
        {
        firstName = Validation.getString("Student [" + (i + 1) + "] first name: ");
        lastName = Validation.getString("Student [" + (i + 1) + "] last name: ");
        score = Validation.getInt("Student [" + (i + 1) + "] score: ", 0, 100);
        studentArray[i] = new Student(firstName, lastName, score);
        }


    Arrays.sort(studentArray); //line 35

    System.out.println();

    //take each obj of the array and print the student info
    for (Student obj : studentArray)
        {
        System.out.println(obj.toString());
        }

    }
}

最佳答案

Arrays.sort() 接受一个对象数组,这些对象是 java.lang.Comparable 的子类型。在您的代码中,您创建了自己的 Comparable 接口(interface),虽然它的行为方式与 java.lang.Comparable 相同,但并不是同一个接口(interface)。

关于尽管实现了 Comparable 接口(interface),但 Java ClassCastException 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19872133/

相关文章:

Java - 奇特的二维数组

java - 使用 Selenium 自动化颜色选择器

javascript - JSON.stringify 不转换数组

c++ - c++:使用数组,指针和循环来制作直方图。我就在那儿,我可能想得太辛苦了

Java-如何从列表中打印特定数组?

当 SKPhysicsBody.node -> SKLabelNode 时出现 Swift ClassCastException。为什么?

引用 Firebase 时抛出 Java java.lang.ClassCastException

java 如何将 FormatStyle.MEDIUM ("Nov 30, 2016") 字符串转换为 LocalDateTime 类型?

java - 删除目录时遇到问题,Java

java - 在 WebSphere7 中,当对象保留内存和共享类缓存已满 100% 时,Dozer 中出现 ClassCastException