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类的所有实例变量.看起来我在某处定义了我的泛型错误.谁能解释一下我在这里做错了什么?
你已经使用了相同的泛型参数名称为内部类,这样类型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)