为什么以下代码有编译错误:
Foo.java:
public abstract class Foo<T> {
public abstract T getInner();
}
Run Code Online (Sandbox Code Playgroud)
MyFoo.java:
public class MyFoo extends Foo<MyFooInner> {
public static class MyFooInner {
}
public MyFooInner getInner() {
return new MyFooInner();
}
}
Run Code Online (Sandbox Code Playgroud)
编译第二个类导致:
MyFoo.java:1: cannot find symbol
symbol: class MyFooInner
public class MyFoo extends Foo<MyFooInner> {
^
1 error
Run Code Online (Sandbox Code Playgroud)
除了将内部类放在自己的文件中之外,还有解决这个问题的方法吗?
And*_*ich 24
使用以下表示法:
public class MyFoo extends Foo<MyFoo.MyFooInner> {...
Run Code Online (Sandbox Code Playgroud)
更新:静态嵌套类实际上是这里指定的顶级类:
静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样.实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包.
因此,您可以引用静态嵌套类的唯一方法是在某处提及其父类.否则,它是对导入的类或同一包中的类的引用.
更新:为了进一步解释,引用该类的另一种方法是将其导入如下:
import my.package.MyFoo.MyFooinner;
public class MyFoo extends Foo<MyFooInner> {...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1530 次 |
| 最近记录: |