Erstellen Sie einen Wrapper für die letzte Klasse?
Etwas wie folgt aus:
class MyClass {
private FinalClass finalClass;
public MyClass {
finalClass = new FinalClass():
}
public void delegatingMethod() {
finalClass.delegatingMethod();
}
}
Eine Wrapper-Klasse wie MyClass
wird nicht als Instanz von FinalClass
akzeptiert werden. Wenn FinalClass
Schnittstellen implementiert, können Sie sie in MyClass
implementieren, um die Klassen ähnlicher zu machen. Das gleiche gilt für alle nicht-endgültigen Eltern der FinalClass
; In diesem Fall sollte Ihr Entwurf MyClass
mit diesen Elternklassen kompatibel sein.
Es ist sogar möglich, eine Wrapper-Klasse während der Laufzeit mit Reflektion zu erstellen. In diesem Fall können Sie die Proxy
class verwenden. Beachten Sie, dass Proxy-Klassen detailliertes Wissen über das Java-Typsystem benötigen.
In der Praxis funktioniert dies jedoch nur, wenn die umwickelte Klasse eine Art Schnittstelle/abstrakte Klasse implementiert und Sie eine Wrapper-Instanz anstelle des Originals bereitstellen können. Wenn Sie beides nicht tun können, dann ist das mit dem Refactoring des Originals schwierig. –
Natürlich können Sie nicht alle Instanzen von FinalClass durch MyClass ersetzen. Sie können jedoch Ihre eigene Schnittstelle definieren, um FinalClass mit MyClass zu umbrechen. Referenzieren Sie FinalClass niemals außerhalb von MyClass. – Arne
@ArneJan, meinst du, dass ich in keiner anderen Klasse auf das Feld "finalClass" verweisen sollte? Warum? –