Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在内部类中使用泛型参数时Java编译失败_Java_Generics_Inner Classes - Fatal编程技术网

在内部类中使用泛型参数时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);
        }
    }
}