Java 如何定义泛型可比较数组类?
我想定义一个泛型类ComparableList,它扩展ArrayList并实现Comparable接口,这样可以使用compareTo方法比较ComparableList类型的两个对象。compareTo应执行词典比较。 这是我的密码:Java 如何定义泛型可比较数组类?,java,generics,Java,Generics,我想定义一个泛型类ComparableList,它扩展ArrayList并实现Comparable接口,这样可以使用compareTo方法比较ComparableList类型的两个对象。compareTo应执行词典比较。 这是我的密码: class ComparableList <T extends Comparable<T>> extends ArrayList implements Comparable<ComparableList>{ @Override
class ComparableList <T extends Comparable<T>> extends ArrayList implements Comparable<ComparableList>{
@Override
public int compareTo(ComparableList o){
Iterator citer = this.iterator();
Iterator oiter = o.iterator();
while (citer.hasNext() && oiter.hasNext()){
if (citer.next() > oiter.next()){
return 1;
}else if (citer.next() < oiter.next()){
return -1;
}else {
if (!citer.hasNext()){
return -1;
}
if(!oiter.hasNext()){
return 1;
}
}
}
return 0;
}
class CompariableList扩展了ArrayList实现了Compariable{
@凌驾
公共国际比较表(可比表o){
迭代器citer=this.Iterator();
迭代器oiter=o.Iterator();
while(citer.hasNext()&&oiter.hasNext()){
if(citer.next()>oiter.next()){
返回1;
}else if(citer.next()
}
我收到了如下错误消息:
TCL.java:11: error: bad operand types for binary operator '>'
if (citer.next() > oiter.next()){
^
first type: Object
second type: Object
TCL.java:13: error: bad operand types for binary operator '<'
}else if (citer.next() < oiter.next()){
^
first type: Object
second type: Object
TCL.java:11:错误:二进制运算符'>'的操作数类型错误
if(citer.next()>oiter.next()){
^
第一类:对象
第二类:对象
TCL.java:13:错误:二进制运算符“的操作数类型不正确。您需要使用Comparable.comapreTo()
比较对象(这就是为什么您需要使用Comparable.comapreTo()比较对象的原因。
(这就是为什么
不会覆盖,
不会覆盖,并且您的可比列表中的每个元素都属于t extensed Comparable
类型,确保二进制运算符不可用。)(Java没有运算符重载),但由于它扩展了Comparable
,因此您有compareTo
来替代。请改用它。您的ComparableList
中的每个元素都属于t extensed Comparable
类型,确保二进制运算符不可用(Java没有运算符重载),但由于它扩展了Comparable
,因此您可以使用compareTo
替换。请改用它。我将代码修改为迭代器I=iter.next(),o=oiter.next()
但是编译器说,对象不能转换为迭代器
似乎它仍然不是一个可比较的列表类型。为什么你希望iter.next()
返回一个迭代器
?它返回下一个项目,即类型为T
。我将代码修改为迭代器I=iter.next(),o=oiter.next();
但是编译器说对象不能转换为迭代器
似乎它仍然不是一个可比较的列表类型为什么你希望iter.next()
返回一个迭代器
?它返回下一个项目-其中一个项目的类型为T
。我修改了代码,但得到了方法compareTo(对象)
错误。似乎它仍然是一个对象,而不是我想要的可比列表类型我修改了我的代码,但获取方法比较到(对象)
错误。似乎它仍然是一个对象,而不是我想要的可比列表类型
int result = citer.next().compareTo(oiter.next());
if (result != 0) {
return result;
} else {
if (citer.hasNext()) {
return -1;
}
if (oiter.hasNext()) {
return 1;
}
}