错误:比较者是抽象的;无法实例化

时间:2014-04-23 09:35:33

标签: java comparator

我正在尝试在我的Windows系统中编译以下代码。

 import java.util.*;
 class Mycomparator1 implements Comparator
 {
  public int compare(Object obj1,Object obj2)
  {
    Integer I1=(Integer)obj1;
    Integer I2=(Integer)obj2;
    return I1.compareTo(I2);
    return I2.compareTo(I1);
    return -I1.compareTo(I2);
    return -I2.compareTo(I1);
    return -1;
    return 0;
  }

   public static void main(String[] args)
   {
        TreeSet t=new TreeSet(new Comparator());
    t.add(20);
    t.add(0);
    t.add(15);
    t.add(5);
    t.add(10);
    System.out.println(t);
   }
  }

当我编译代码时,我收到以下错误

 MyComparator1.java:18: error: Comparator is abstract; cannot be instantiated
             TreeSet t=new TreeSet(new Comparator());
                                  ^
 Note: MyComparator1.java uses unchecked or unsafe operations.
 Note: Recompile with -Xlint:unchecked for details.
 1 error

我该如何解决这类错误?

2 个答案:

答案 0 :(得分:2)

Comparatorinterface,接口无法实例化,因此您必须创建MyComparator1的实例。

TreeSet t=new TreeSet(new MyComparator1());

要编译此代码,还必须修改compare方法以删除无法访问的返回语句。第一个return语句之后的任何内容都将永远不会被执行。

  public int compare(Object obj1,Object obj2)
  {
    Integer I1=(Integer)obj1;
    Integer I2=(Integer)obj2;
    return I1.compareTo(I2);
    //removed 4 other return statements
  }

答案 1 :(得分:1)

您应该使用:

TreeSet t=new TreeSet(new MyComparator1());

因为你想使用你的比较器。

顺便说一下,你应该重新考虑你的compare函数,因为那里有编译错误 - 函数将始终返回第一个return语句,生成unreachable code错误。