Java 使用可比较接口时类强制转换异常
当我试图执行下面的代码时,编译器在第13行抛出错误“java.lang.ClassCastException”。有人能告诉我下面的代码有什么问题吗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[
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没错,我没有重读就写了答案