質問

私はこのようないくつかのコードを持っています

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() { }
    }
}

そして、私はまだ同じエラーを取得します。私は何をしないのですか?

FIXED!私はreturn new FooImpl();するラインreturn new Foo.FooImpl();を変更

役に立ちましたか?

解決

エクセレント説明ここを - 簡単に、あなたはクラスFooImplstaticを作成する必要があります、それだけではない(あなたが持っていない)外部クラスの特定ののインスタンスのために、外部クラスに結び付けられていますので。それは静的である必要があるようgetFoo法もところで、見えます - それ以外の場合は、どのようなのインスタンスFooのあなたはそれを呼び出すことで計画していた。

他のヒント

どのようにしてgetFoo()を呼び出すために人々をつもりですか?

あなたは完全にファンキーでラジカル何かをやっている場合を除き、あなたはそれがstaticようにする必要があります。

FooImplクラスstaticを作成し、それが動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top