为什么以下代码有编译错误:
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> {...