实现界面

时间:2010-05-15 18:35:18

标签: java interface

大家好,所以我有这个任务,我需要实现接口来遍历ArrayList并对其进行排序(升序或降序)。我不想要“答案”我只需要一些关于我的方法的建议以及为什么我得到这个错误

Exception in thread "main" java.lang.ClassCastException: Week7.Check cannot be cast to java.lang.Comparable
 at java.util.Arrays.mergeSort(Unknown Source)
 at java.util.Arrays.sort(Unknown Source)
 at java.util.Collections.sort(Unknown Source)
 at Week7.TestCheck.main(TestCheck.java:18)

我就这样做了:

可比较有一种名为public int compairTo(Object o)的方法:

public class Check implements comparable {
    private Integer checkNumber;

    public Check(Integer newCheckNumber) {
        setCheckNumber(newCheckNumber);
    }

    public String toString() {
        return getCheckNumber().toString();
    }

    public void setCheckNumber(Integer checkNumber) {
        this.checkNumber = checkNumber;
    }

    public Integer getCheckNumber() {
        return checkNumber;
    }

    @Override
    public int compairTo(Object o) {
        Check compair = (Check) o;
        int result = 0;
        if (this.getCheckNumber() > compair.getCheckNumber())
            result = 1;

        else if (this.getCheckNumber() < compair.getCheckNumber())
            result = -1;

        return result;
    }
}

在我的主要内容中我有这个

import java.util.ArrayList;
import java.util.Collections;

public class TestCheck {
    public static void main(String[] args) {
        ArrayList checkList = new ArrayList();

        checkList.add(new Check(445));
        checkList.add(new Check(101));
        checkList.add(new Check(110));
        checkList.add(new Check(553));
        checkList.add(new Check(123));

        Collections.sort(checkList);

        for (int i = 0; i < checkList.size(); i++) {
            System.out.println(checkList.get(i));
        }
    }
}

6 个答案:

答案 0 :(得分:7)

来吧 - Java区分大小写。 “可比”与“可比”不一样

public class Check implements comparable

拼写也很重要。 “compairTo”与“compareTo”

的方法不同
@Override
public int compairTo(Object o) {

答案 1 :(得分:2)

我猜你实现的界面可比较不是界面 java.lang.Comparable ,他们的名字可能是相同的,但包裹?

答案 2 :(得分:1)

要使用Comparator(使用两个参数调用的内容),必须将其作为参数传递给Collections.sort方法。

像这样:

Collections.sort( checkList, new Comparator<Check>() {
    public int compare( Check one, Check two ) {
        return one.getCheckNumber() - two.getCheckNumber();
    }
 });

这就是它的样子:

import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Collections;

public class Check   {
    private final Integer checkNumber;

    public Check(Integer newCheckNumber) {
        this.checkNumber = newCheckNumber;
    }
    public Integer getCheckNumber() {
        return this.checkNumber;
    }
    public static void main( String [] args ) {
        List<Check> list = new ArrayList<Check>();

        list.add(new Check(445));
        list.add(new Check(101));
        list.add(new Check(110));
        list.add(new Check(553));
        list.add(new Check(123));

        Collections.sort( list, new Comparator<Check>() {
           public int compare( Check one, Check two ){
               return one.getCheckNumber() - two.getCheckNumber();
           } 
        });
        for( Check item : list ) {
            System.out.println( item.getCheckNumber() );
        }
    }
}

答案 3 :(得分:0)

实现接口时,必须使用接口提供的方法签名,与接口中定义的方法签名完全相同:

public int compareTo(Object o) 

另外,您可能希望参数化列表,例如。 List<Comparable>和比较例如。使用泛型的Comparable<Check>是一种编译时技术,可以识别你的拼写错误

答案 4 :(得分:0)

传递给Arrays.sort()的任何内容都必须实现Comparable,这是一个java系统接口。你可能想扔掉comparable

答案 5 :(得分:0)

  

[...并且]为什么我收到此错误

致电时:

Collections.sort(checkList);

在第18行中,该方法期望您的元素实现Comparable(以便能够比较它们)您可能不知道这一点,但它是如何工作的(如documentation中所指定的)

  

列表中的所有元素都必须实现Comparable接口

然后该方法运行,它会尝试将您的对象“强制转换”为类型Comparable,因为您的类没有实现它,它会抛出ClassCastException

为了更好地理解这一点,请尝试以下代码:

class Some {
}
class Test {
    public static void main( String [] args ) {
         Runnable r = ( Runnable ) new Some();
    }
}

如果你分析这行,你可能会认为“你为什么试图从某些人那里分配一个Runnable?他们没有关联!”

你是对的,让我们看看输出:

$ java Test
Exception in thread "main" java.lang.ClassCastException: Some cannot be cast to java.lang.Runnable
        at Test.main(A.java:5)

相同的错误消息。你可以看一下第5行并看看演员表。

这正是Collections.sort方法中发生的事情,但是Comparable