在内部类中使用泛型参数时Java编译失败
请看下面的代码片段:在内部类中使用泛型参数时Java编译失败,java,generics,inner-classes,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(e
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);
}
}
}
这看起来不像是可访问性问题,因为非静态内部类可以访问outter类的所有实例变量。看起来我把泛型定义错了。谁能解释一下我在这里做错了什么吗?封闭类的类型是内部类类型的一部分
FooInner
已经由E
参数化,因为它是外部类的一部分;显式参数化是冗余的和不正确的,因为它实际上试图引入一个与现有类型参数同名的新类型参数。只需删除私有类FooInner
中的
,您就是金色的。您对内部类使用了相同的泛型参数名称,因此内部类的类型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);
}
}
}
公共类Foo实现IFoo{
...
私有类FooInner实现IFoo{//“E”,这里是来自Foo的同一个“E”
@凌驾
公共空旷区多福(东环境){
a、 doA(环境);
}
}
}
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);
}
}
}