Was mache ich mit Guice, wenn ich einen Elternkonstruktor aufrufen muss, der auch injizierbar ist? z.B. Ich habe eine abstrakte Elternklasse, die einen Konstruktor hat, der mit einem Objekt injiziert wird, das von allen abgeleiteten Kindern geteilt wird, und jedes Kind hat auch einen injizierbaren Konstruktor.
Der Aufruf von super () funktioniert nicht, weil Java möchte, dass ich das Objekt als einen Parameter übergebe, anstatt Guice injizieren zu lassen.
Danke
BEARBEITEN: Ich frage mich, ob ich vielleicht stattdessen Methode Injektion verwenden sollte?
Sie müssten genau dasselbe tun, wenn Sie Guice nicht verwenden ... deklarieren Sie alle Parameter, die der Elternkonstruktor als Parameter für den Konstruktor jedes Kindes benötigt, und übergeben Sie diese an super
.
Wenn also der Konstruktor Ihrer abstrakten Elternklasse ein Foo
hat, muss der Konstruktor einer Kindklasse wie folgt aussehen:
Im Abschnitt Minimize Mutability der Guice Best Practices finden Sie folgende Richtlinie:
Unterklassen müssen
super()
mit allen Abhängigkeiten aufrufen. Das macht Konstruktorinjektion umständlich, insbesondere als die injizierte Basis Klassenänderungen.
In der Praxis sehen Sie, wie Sie das mit der Konstruktorinjektion tun:
%Vor%Eine bessere Alternative ist es, etwas Ähnliches wie das Strategie-Muster zu verwenden, um alle Felder einzukapseln, die die Oberklasse injizieren möchte, und dann kann die Unterklasse diese injizieren. Zum Beispiel:
%Vor%