我正在尝试在我的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
我该如何解决这类错误?
答案 0 :(得分:2)
Comparator
是interface,接口无法实例化,因此您必须创建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
错误。