在内部类中使用泛型参数时Java编译失败

Lux*_*ter 3 java generics inner-classes

请查看下面的代码段:

interface IFoo<E>{
    void doFoo(E env);
}

class A<E>{
    public void doA(E env){}
}

public class Foo<E> implements IFoo<E>{
    public A<E> a;

    @Override
    public void doFoo(E env) {
        a.doA(env);
    }

    private class FooInner<E> implements IFoo<E>{

        @Override
        public void doFoo(E env) {
            a.doA(env);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse在私有内部类中抱怨a.doA(env)以下消息.

The method doA(E) in the type A<E> is not applicable for the arguments (E)
Run Code Online (Sandbox Code Playgroud)

它似乎不像可访问性问题,因为非静态内部类可以访问outter类的所有实例变量.看起来我在某处定义了我的泛型错误.谁能解释一下我在这里做错了什么?

Boh*_*ian 6

你已经使用了相同的泛型参数名称为内部类,这样类型E的内部类的被遮蔽E外部类的.

从内部类中删除泛型参数,如下所示:

public class Foo<E> implements IFoo<E>{

    ...

    private class FooInner implements IFoo<E>{ // "E" here is the same "E" from Foo

        @Override
        public void doFoo(E env) {
            a.doA(env);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)