如果它是Java中子类的内部类,则找不到类型参数

jon*_*rry 14 java

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

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)

  • 你能解释*吗?还是只是一个幸运的狂野猜测? (3认同)
  • 这是您引用静态嵌套类的常用方法:http://download.oracle.com/javase/tutorial/java/javaOO/nested.html (2认同)