通用类无法编译

时间:2017-05-02 06:18:04

标签: java generics

我有一个泛型方法,需要3种类型的元素,我的问题是,当我尝试编译它时 - 它失败并显示错误消息。

  

重复类型参数E

我无法理解这个错误,因为拥有两个不同类型的元素是完全没问题的。

public class Test {
    static abstract class Test2<E, E extends MyObject> {
       //At  second E that extends MyObject it is failing.
    }

    class MyObject {
    }

    static <E> void m1(E e,E ee){
    //Same E is working fine in case of Methods 
    }
    public static void main(final String[] args) {

    }

}

有人可以告诉我为什么这个编译失败了。

1 个答案:

答案 0 :(得分:0)

两个通用参数都具有相同的名称E

使用别的东西,比如下面的cos,你会很高兴。

public class Test {
    static abstract class Test2<E, T extends MyObject> {
       //At E2 it is failing.
    }

    class MyObject {
    }

    public static void main(final String[] args) {

    }

}

修改 我将尝试使用示例进行解释。

class Test2<E, E extends MyObject> //compilation fails here. {
    E generic1;
    E generic2;
}

现在,如果你使用这样的代码并声明同一类型generic1的两个变量generic2E,那么java无法识别是否{{1} }是第一个参数或第二个参数,它是E的子类。