2011-02-09 18 views
0

我只是无法弄清楚,也许你可以帮助我。Java:使用一种方法在数组参数中的不同类型

问题:


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 

我不明白为什么,但我可以找不到orkarround,以便我不必重复代码,这将是必要的,因为我有更多的ArrayList对象和更长的代码。

我希望你们其中一个有想法。

问题已解决!解决方法是:

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) { 
    return o.get(0).compareTo(o.get(1)); 
} 

由Peter Lawrey

+0

如果您的问题被回答,你应该标记正确的答案为“接受”(应该有一个“接受”按钮,或者这样靠近它),那么它会得到一个绿色的√图标,彼得获得15个声望点。 – 2011-02-09 18:48:58

回答

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 
    } 
} 
+0

对不起,我的不好,现在它的更正 – FGG 2011-02-09 16:07:54

+0

更新............. – 2011-02-09 16:13:18

0

当你使用一个对象通过它的超类的方法,你不能假设它的子类的方法可用。

+0

嗯,是的,我也想到了。任何idear workarround问题? – FGG 2011-02-09 16:09:46

0

请尝试以下编译和工作为abcdef没有警告。

public <T extends Comparable<T>> int foo1 (ArrayList<T> o) { 
    return o.get(0).compareTo(o.get(1)); 
} 
+0

Tryed可以工作,但它仍然表明我使用原始类型,但我不确定这是否正常。 – FGG 2011-02-09 16:08:54

0

你需要使该方法一般:

public <T extends Comparable<? super T>> int foo1 (ArrayList<T> o) { 
相关问题