我有一些这样的代码:

public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    abstract void DoFoo();

    private class FooImpl extends Foo {
        public FooImpl() { }

        @Override
        void DoFoo() { }
    }
}

但是Eclipse告诉我No enclosing instance of type Foo is accessible.那么如何使它起作用?

我试图使其尽可能简单,以查看其是否可以编译:
public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    private static class FooImpl extends Foo {
        public FooImpl() { }
    }
}

而且我仍然遇到相同的错误。我想念什么?

固定!我将return new FooImpl();行更改为return new Foo.FooImpl();

最佳答案

很好的解释here-简而言之,您需要创建FooImplstatic,因此它仅与外部类相关联,而与外部类的特定实例(您没有)相关。 getFoo方法看起来也应该是静态的,顺便说一句-否则,您打算调用哪个Foo实例?

10-07 16:33