我工厂出了什么问题?

时间:2009-12-08 02:24:11

标签: java factory-pattern

我有一些这样的代码:

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

3 个答案:

答案 0 :(得分:9)

优秀的解释here - 简而言之,您需要创建类FooImpl static,因此它只与外部类绑定,而不是与特定的实例绑定(你没有)。 getFoo方法看起来应该是静态的,顺便说一下 - 否则,你计划调用Foo实例

答案 1 :(得分:2)

您打算如何打电话给getFoo()

除非你做的事情完全是时髦和激进的,否则你需要做出static

答案 2 :(得分:1)

制作FooImpl课程static,它会起作用。