public class arr<T>
{
class comp <T extends Comparable<T>> implements Comparator<T>
{
public int compare(T lObj,T rObj)
{
return lObj.compareTo(rObj);
}
}
ArrayList<T> list;
Comparator<T> comparator;
public arr()
{
list = new ArrayList<T>();
comparator = new comp();
}
public void add(T data)
{
list.add(data);
}
public int getLength()
{
return list.size();
}
public T get(int index)
{
return list.get(index);
}
public void sort()
{
list.sort(comparator);
}
}
你好,我正在尝试使排序函数工作,但遇到了问题。 在arr的构造函数中,如果我写入
comparator = new comp<T>();
它给我一个错误提示,说:
"type argument T#1 is not within bounds of type-variable T#2 comparator =
new comp<T>(); ^
where T#1,T#2 are type-variables:
T#1 extends Object declared in class arr
T#2 extends Comparable<T#2> declared in class arr.comp"
如果我把类型去掉,像这样写
comparator = new comp;
然后它可以工作,但会给我一个警告,内容如下:
warning: [rawtypes] found raw type: arr.comp
comparator = new comp();
我能理解"原始类型(raw types)"指的是什么。虽然我没有指定类型,但程序还是正常运行了,如果我尝试通过指定类型来修复警告的话,就会出现错误。您能帮我弄清楚这个问题吗?我知道我是个新手,我的代码可能让您感到头疼。我正在尝试使用泛型比较器,并尝试很多东西以增加熟练度。谢谢。
new comp<T>
?这个T
类型在这里的类之外是不存在的,如果存在的话,它必须是一个可比较的类型。另外,new comp;
是无法编译通过的,你需要加上括号。 - OneCricketeer