我只是想不出来,也许你可以帮助我。
问题:
public class class1 implements Comparable<class1> {
public int compareTo(class1 o) {
//some code
}
}
public class class2 implements Comparable<class2> {
public int compareTo(class2 o) {
//some code
}
}
public class foo {
private ArrayList<Class1> abc = new ArrayList<Class1>();
private ArrayList<Class2> def = new ArrayList<Class2>();
}
在以下o = abc or def
public int foo1 (ArrayList<Object> o) {
o[0].compareTo(o[1]);
}
这段代码不断给我这个错误:
The method compareTo(class1) is undefined for the type Object
我明白为什么但是我找不到一个workarround,所以我不必重复代码,这是必要的,因为我有更多的ArrayList对象和更长的代码。
我希望你们其中一个有个主意。
问题解决了!解决方案是:
public <T extends Comparable<T>> int foo1 (ArrayList<T> o) {
return o.get(0).compareTo(o.get(1));
}
Peter Lawrey
答案 0 :(得分:0)
implements Comparable<class1>
您正在实施,因此您需要为所有接口方法提供实现,否则将其设为抽象
像
一样实现它public class class1 implements Comparable<class1> {
public int compareTo(class1 o) {
//some code
}
}
public class class2 implements Comparable<class2> {
public int compareTo(class2 o) {
//some code
}
}
答案 1 :(得分:0)
当你通过它的超类方法使用一个对象时,你不能假设它的子类方法是可用的。
答案 2 :(得分:0)
尝试以下内容,在没有任何警告的情况下编译并适用于abc
和def
。
public <T extends Comparable<T>> int foo1 (ArrayList<T> o) {
return o.get(0).compareTo(o.get(1));
}
答案 3 :(得分:0)
您需要使方法具有通用性:
public <T extends Comparable<? super T>> int foo1 (ArrayList<T> o) {