Ich suche nach einem Beispielcode, der die Guava ForwardingList-Klasse erklärt. Im Grunde implementiere ich eine benutzerdefinierte ArrayList-Klasse, die verwendet wird, um diese in meine frühere SO-Frage . Ich habe die Google-Sammlung zuvor noch nie verwendet. Aber wenn ich mir die JavaDoc-ForwardingList anschaue, kann ich meine benutzerdefinierte Klasse implementieren durch Unterklassierung von ForwardingList.
ForwardingList
(welche extends ForwardingCollection
, was wiederum extends ForwardingObject
) implementiert die Dekorationsmuster .
Um zu verwenden, müssen Sie nur zwei Dinge tun:
@Override delegate()
, um die unterstützende Delegat-Instanz zurückzugeben, von der Methoden an @Override
whatever List
Methode, die Sie dekorieren möchten Das Decorator-Muster ermöglicht Ihnen die Verwendung von Komposition anstelle von Vererbung ( Effektive Java 2. Edition, Favor-Komposition über Vererbung ) und ForwardingList
von Guava bietet eine praktische Vorlage, aus der Sie Ihre eigene% schreiben können. co_de% implementation, die den gesamten Installationsmechanismus für Sie bereitstellt.
Beachten Sie, dass Sie, wenn Sie ein List
dekorieren möchten, wahrscheinlich möchten, dass Ihre Unterklasse ArrayList
auch ForwardingList
.
RandomAccess
Hier ist ein (unvollständiges!) Beispiel für ListWithDefault
, das ForwardingList
-Werte im Delegaten durch einen vorgegebenen Standardwert ersetzt.
Wir können es dann wie folgt testen:
%Vor% Beachten Sie, dass dies eine unvollständige Implementierung ist. Die null
-Methode gibt immer noch den toString()
des Delegierten zurück, der den Standardwert nicht kennt. Einige andere Methoden müssen auch für eine vollständigere Implementierung toString()
sein.
Tags und Links java collections guava