3

我有一些这样的代码:

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();

4

3 回答 3

9

这里有很好的解释——简而言之,你需要制作 class FooImpl static,所以它只与外部类相关联,而不是与外部类的特定实例(你没有)相关联。顺便说一句,该getFoo方法看起来也应该是静态的——否则,您打算调用哪个实例?Foo

于 2009-12-08T02:30:56.010 回答
2

您打算如何称呼人们getFoo()

除非你正在做一些完全时髦和激进的事情,否则你需要成功static

于 2009-12-08T02:31:32.323 回答
1

FooImpl上课,static它会起作用。

于 2009-12-08T02:32:24.463 回答