Java:在数组参数中为不同类型使用一个方法

时间:2011-02-09 16:03:48

标签: java inheritance interface

我只是想不出来,也许你可以帮助我。

问题:


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

4 个答案:

答案 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)

尝试以下内容,在没有任何警告的情况下编译并适用于abcdef

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) {