Java 使用Compariable对对象进行排序<>。错误
它工作了,但现在我打开我的项目,检查代码,它不能正常工作 这是我的代码:Java 使用Compariable对对象进行排序<>。错误,java,Java,它工作了,但现在我打开我的项目,检查代码,它不能正常工作 这是我的代码: class House implements Comparable<House> { private String hName; private int windowsNumber, doorNumber; //... @Override public int compareTo(House obj) {
class House implements Comparable<House>
{
private String hName;
private int windowsNumber,
doorNumber;
//...
@Override
public int compareTo(House obj)
{
int nr = ((House)obj).getWindowsNumber();
return nr - getWindowsNumber();
}
我收到以下错误:sortobject.House无法转换为java.lang.Comparable
。有人能猜出来吗?我不知道它有什么毛病
完整错误代码:
Exception in thread "main" java.lang.ClassCastException: sortobject.House cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at sortobject.SortObject.main(SortObject.java:24)
Java Result: 1
编辑2:
我创建了一个新项目,并像以前一样使用相同的方法编写了代码,而且效果很好。我相信我的界面出了问题。JDK1.7似乎工作正常-制作了代码的本地副本,成功编译并执行了main方法。也许,清理项目真的能起到神奇的作用。您可能在主方法中引用了不同的
房屋
(可能是另一个包中的一个类,它具有相同的结构,只是它没有实现Comparable
)。确保该房屋
与上述房屋
相同:
House[]arr=新房子[3]代码>这里的情况看起来不错。仅供参考,您的比较方法具有冗余代码。它应该简单地说return obj.getWindowsNumber()-getWindowsNumber()
@MarkoTopolnik是的,该强制转换是多余的。请尝试Arrays.sort(…
?@OldCurmudgeon它没有改变任何事情我认为问题出在所使用的不同房屋类中,正如@Nishant shresh所写的,这不是IDE问题。也许你使用的是不同的可比的接口?将数组.sort(arr);
改为集合.sort(Arrays.asList(arr));
它会在编译时告诉您是否有错误。好的,我创建了一个新项目并再次编写了代码(不是复制粘贴),它是有效的。@Holger它告诉我不能像你写的那样做,因为这不是合适的方法…@Ernusc:重要的一点是它告诉你的原因。它似乎证实了你的怀疑,你的项目中有一个不同的可比的接口。
Exception in thread "main" java.lang.ClassCastException: sortobject.House cannot be cast to java.lang.Comparable
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at sortobject.SortObject.main(SortObject.java:24)
Java Result: 1