Frage

Ich habe einige Code wie folgt bekommen:

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

    abstract void DoFoo();

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

        @Override
        void DoFoo() { }
    }
}

Aber Eclipse sagt mir No enclosing instance of type Foo is accessible. So wie kann ich diese Arbeit bekommen?

Ich habe versucht, es so einfach wie möglich zu machen, um zu sehen, ob es würde kompilieren:

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

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

Und ich immer noch die gleichen Fehler. Was bin ich?

FIXED! Ich habe die Linie return new FooImpl(); return new Foo.FooImpl();

War es hilfreich?

Lösung

Ausgezeichnete Erklärung hier - kurz gesagt, müssen Sie Klasse FooImpl static machen , so dass es nur gebunden an die äußeren Klasse, nicht auf eine bestimmte Instanz der äußeren Klasse (die Sie nicht haben). Die getFoo Verfahren sieht auch wie es statisch sein sollte, btw - sonst, was Instanz von Foo hatten Sie es auf Aufforderung an

Andere Tipps

Wie wollen Sie Menschen getFoo() anrufen?

Wenn Sie etwas ganz unkonventionell und radikal tun, werden Sie brauchen, um es static.

Machen Sie die FooImpl Klasse static und es wird funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top