Java 使用可比较接口时类强制转换异常

Java 使用可比较接口时类强制转换异常,java,classcastexception,comparable,Java,Classcastexception,Comparable,当我试图执行下面的代码时,编译器在第13行抛出错误“java.lang.ClassCastException”。有人能告诉我下面的代码有什么问题吗 package chapter11; import java.util.*; public class ComparableExample { public static void main(String[] args) { // TODO Auto-generated method stub Item[

当我试图执行下面的代码时,编译器在第13行抛出错误“java.lang.ClassCastException”。有人能告诉我下面的代码有什么问题吗

package chapter11;

import java.util.*;

public class ComparableExample {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Item[] items = new Item[3];
        items[0] = new Item(102, "Duct Tape");
        items[1] = new Item(103, "Bailing Wire");
        items[2] = new Item(104, "Chewing Gum");

        Arrays.sort(items);
        for (Item i : items) {
            System.out.println(i.getNumber() + ":" + i.getDescription());
        }
    }
}

interface Comparable {
    int compareTo(Object o);
}

class Item implements Comparable {
    private int number;
    private String description;

    public Item(int number, String description) {
        this.number = number;
        this.description = description;
    }

    public int getNumber() {
        return number;
    }

    public String getDescription() {
        return description;
    }

    public int compareTo(Object o) {
        Item i = (Item) o;
        if (this.getNumber() < i.getNumber())
            return -1;
        if (this.getNumber() < i.getNumber())
            return 1;
        return 0;
    }
}
包第11章;
导入java.util.*;
公共类可比示例{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
项目[]项目=新项目[3];
项目[0]=新项目(102,“管道胶带”);
第[1]项=新项目(103,“捞泥线”);
项目[2]=新项目(104,“口香糖”);
数组。排序(项);
用于(项目i:项目){
System.out.println(i.getNumber()+“:”+i.getDescription());
}
}
}
界面可比{
int compareTo(对象o);
}
类项实现了可比较的{
私有整数;
私有字符串描述;
公共项(整数编号、字符串说明){
这个数字=数字;
this.description=描述;
}
public int getNumber(){
返回号码;
}
公共字符串getDescription(){
返回说明;
}
公共整数比较对象(对象o){
第i项=第o项;
if(this.getNumber()
感谢您的帮助,
谢谢

删除您的
可比
界面,然后使用 还有,也许你可以改变

public int compareTo(Object o) {
        Item i = (Item) o;
        if (this.getNumber() < i.getNumber())
            return -1;
        if (this.getNumber() < i.getNumber())
            return 1;
        return 0;
    }
public int compareTo(对象o){
第i项=第o项;
if(this.getNumber()
进入:

public int compareTo(Object o) {
            Item i = (Item) o;
            if (this.getNumber() < i.getNumber())
                return -1;
            if (this.getNumber() > i.getNumber())
                return 1;
            return 0;
        }
public int compareTo(对象o){
第i项=第o项;
if(this.getNumber()i.getNumber())
返回1;
返回0;
}

为什么要创建自己的
Compariable
界面?Item类中的Comparieto方法可以简化为:返回this.number-i.number;compareTo不指示返回-1、1或0。您只需要返回一个pos/neg号码或0。您要检查
两次<代码>1将永远不会返回。@老实说,这不是一个很好的简化。当结果超出界限时,有可能溢出。最好是使用
Integer.compare()
方法。@RohitJain这是一个公平点。在这种情况下,修复原始类型。
Comparable
是一个接口。无论是在操作代码中,还是在标准Java API中,删除可比较的接口都不会改变任何事情。它仍然在第14行给出相同的错误(线程“main”java.lang.ClassCastException中的异常:chapter11.Item不能转换为java.lang.Comparable)。此外,将compareToclass@RohitJain没错,我没有重读就写了答案