为什么以下代码有编译错误:

Foo.java:

public abstract class Foo<T> {
    public abstract T getInner();
}

MyFoo.java:
public class MyFoo extends Foo<MyFooInner> {
    public static class MyFooInner {
    }
    public MyFooInner getInner() {
        return new MyFooInner();
    }
}

编译第二类产生以下结果:
MyFoo.java:1: cannot find symbol
symbol: class MyFooInner
public class MyFoo extends Foo<MyFooInner> {
                               ^
1 error

除了将内部类放在自己的文件中之外,还有其他方法可以解决此问题吗?

最佳答案

使用以下符号:

public class MyFoo extends Foo<MyFoo.MyFooInner> {...

更新:静态嵌套类实际上是指定的here的顶级类:



因此,引用静态嵌套类的唯一方法是在某处提及其父类。否则,它是对导入的类或同一包中的类的引用。

UPDATE :要进一步说明,引用类的另一种方法是像这样导入它:
import my.package.MyFoo.MyFooinner;

public class MyFoo extends Foo<MyFooInner> {...

07-24 09:28