Was ist los mit meiner Fabrik?
-
16-09-2019 - |
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();
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.