it-swarm.com.de

Was ist eine Wrapper-Klasse?

Was ist eine Wrapper-Klasse?
Wie sind solche Klassen nützlich?

212
Bhaskar

Im Allgemeinen ist eine Wrapper-Klasse jede Klasse, die die Funktionalität einer anderen Klasse oder Komponente "umschließt" oder "einkapselt". Diese sind nützlich, indem eine Abstraktionsebene von der Implementierung der zugrunde liegenden Klasse oder Komponente bereitgestellt wird. Beispielsweise können Wrapperklassen, die COM-Komponenten umschließen, den Prozess des Aufrufs der COM-Komponente verwalten, ohne den aufrufenden Code damit zu belasten. Sie können auch die Verwendung des zugrunde liegenden Objekts vereinfachen, indem sie die Anzahl der beteiligten Schnittstellenpunkte verringern. Dies führt häufig zu einer sichereren Verwendung der zugrunde liegenden Komponenten.

165
Paul Sonier

Wie es sich anhört: Eine Klasse, die die Funktionalität einer anderen Klasse oder API in eine einfachere oder einfach andere API "einschließt".

Siehe: Adaptermuster , Fassadenmuster

67
Shog9

Wrapper-Klassen bieten eine Möglichkeit, primitive Typen als Objekte zu verwenden. Für jedes Primitiv haben wir eine Wrapper-Klasse wie:

int Integer
byte Byte 

Ganzzahl und Byte sind die Wrapper-Klassen des primitiven Int und Bytes. Es gibt Zeiten/Einschränkungen, in denen Sie die Grundelemente als Objekte verwenden müssen, damit Wrapper-Klassen einen Mechanismus bereitstellen, der als Boxing/Unboxing bezeichnet wird.

Das Konzept kann durch das folgende Beispiel als gut verstanden werden

double d = 135.0 d;
Double doubleWrapper = new Double(d);

int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();

auf diese Weise können wir den Typ der Wrapper-Klasse auch für die Konvertierung in andere primitive Typen verwenden. Diese Art der Konvertierung wird verwendet, wenn Sie einen primitiven Typ in ein Objekt konvertieren und damit auch andere Primitive abrufen müssen. Für diesen Ansatz müssen Sie jedoch einen großen Code schreiben. Dasselbe kann jedoch mit der einfachen Casting-Technik erreicht werden, da das Code-Snippet wie folgt erreicht werden kann

double d = 135.0;
int integerValue = (int) d ;

Der doppelte Wert wird explizit in einen ganzzahligen Wert konvertiert, der auch als Downcasting bezeichnet wird.

40
SBTec

Eine Wrapper-Klasse muss nicht unbedingt eine andere Klasse umschließen. Es könnte sich um eine API-Klassenumbruchfunktion handeln, z. eine dll datei.

Beispielsweise kann es sehr nützlich sein, eine DLL-Wrapper-Klasse zu erstellen, die sich um die gesamte DLL-Initialisierung und -Aufräumarbeiten kümmert und Klassenmethoden erstellt, die Funktionszeiger umbrechen, die z. GetProcAddress().

Prost !

17
ralphtheninja

Eine Wrapper-Klasse ist eine Klasse, die etwas anderes "umschließt", genau wie sein Name.

Die formalere Definition wäre eine Klasse, die das Adapter Pattern implementiert. Auf diese Weise können Sie einen Satz von APIs in eine benutzerfreundlichere, lesbarere Form ändern. Wenn Sie beispielsweise in C # die native Windows-API verwenden möchten, können Sie sie in eine Klasse einbinden, die den .NET-Entwurfsrichtlinien entspricht.

8
Reed Copsey

Es gibt verschiedene Entwurfsmuster, die als Wrapper-Klassen bezeichnet werden können.

Siehe meine Antwort auf " Wie unterscheiden sich die Proxy-, Decorator-, Adapter- und Bridge-Muster? "

8
Bill Karwin

Es kann auch nützlich sein, darauf hinzuweisen, dass in einigen Umgebungen vieles, was Wrapper-Klassen tun können, durch Aspekte ersetzt wird.

BEARBEITEN:

Im Allgemeinen wird ein Wrapper die Funktionen des Wrappee erweitern, ohne sich Gedanken über die Implementierung des Wrappee zu machen, da es sonst keinen Sinn macht, einen Wrapper zu erstellen oder die Wrapper-Klasse zu erweitern. Ein typisches Beispiel ist das Hinzufügen von Zeitinformationen oder Protokollierungsfunktionen um eine andere Dienstschnittstelle, anstatt sie jeder Implementierung dieser Schnittstelle hinzuzufügen.

Dies ist dann ein typisches Beispiel für die Aspect-Programmierung. Anstatt eine Schnittstelle Funktion für Funktion durchzugehen und die Boilerplate-Protokollierung hinzuzufügen, definieren Sie in der Aspektprogrammierung einen Pointcut, eine Art regulärer Ausdruck für Methoden, und deklarieren dann Methoden, die Sie vor, nach oder um alle übereinstimmenden Methoden ausführen möchten der pointcut. Es ist wahrscheinlich fair zu sagen, dass Aspektprogrammierung eine Art der Verwendung des Decorator-Musters ist, für das auch Wrapper-Klassen verwendet werden können, beide Technologien jedoch andere Verwendungszwecke haben.

7
Jherico

Wrapper-Klasse ist eine Klasse, die die andere Klasse umschließt und die Abstraktion zwischen dem Client und der ursprünglichen Klasse bereitstellt, die umschlossen wird.

7
Rakesh verma

eine Wrapper-Klasse ist normalerweise eine Klasse, die ein Objekt als Privateigenschaft besitzt. Der Wrapper implementiert die API dieses privaten Objekts und kann daher als Argument an die Stelle übergeben werden, an der sich das private Objekt befinden würde.

angenommen, Sie haben eine Sammlung und möchten eine Art Übersetzung verwenden, wenn Objekte hinzugefügt werden. Sie schreiben eine Wrapper-Klasse, die alle Methoden der Sammlung enthält. Wenn add () aufgerufen wird, übersetzt der Wrapper die Argumente, anstatt sie nur in die private Sammlung zu übergeben.

der Wrapper kann überall dort verwendet werden, wo eine Sammlung verwendet werden kann, und auf das private Objekt können noch andere Objekte verweisen und es lesen.

5
Amir Arad

Die Java-Programmierung stellt für jeden primitiven Datentyp eine Wrapper-Klasse bereit, um einen primitiven Datentyp in ein entsprechendes Objekt der Wrapper-Klasse zu konvertieren.

3
THOSEEF PASHA

Eine Wrapper-Klasse ist eine Klasse, mit der eine andere Klasse umbrochen wird, um eine Ebene der Indirektion und Abstraktion zwischen dem Client und der ursprünglichen Klasse, die umbrochen wird, hinzuzufügen.

3
Andrew Hare

Wrapper-Klasse ist ein Wrapper um einen primitiven Datentyp. Es repräsentiert primitive Datentypen in ihren entsprechenden Klasseninstanzen, z. Ein boolescher Datentyp kann als boolesche Klasseninstanz dargestellt werden. Alle primitiven Wrapper-Klassen in Java) sind unveränderlich, d. H. Wenn einer Wrapper-Klasseninstanz einmal ein Wert zugewiesen wurde, kann er nicht mehr weiter geändert werden.

3
David

Es ist keine leichte Aufgabe, eine Wrapper-Klasse zum Wohlfühlen zu bringen. Es ist auch keine leichte Aufgabe, eine Wrapper-Klasse so zu verstehen, wie sie von einigen anderen entworfen wurde. Weil es eine Idee ist, kein Code. Nur wenn Sie die Idee verstehen, können Sie Wrapper verstehen.

1
Tony

Derzeit habe ich eine Wrapper-Klasse für mein Projekt verwendet und die Hauptvorteile, die ich erhalte (nur ein einziger Vorteil, um die Erläuterung des Themas zu erweitern):

Ausnahmebehandlung: Meine Hauptklasse, die von einer anderen Klasse umbrochen wird, verfügt über Methoden, die gegebenenfalls Ausnahmen auslösen. Daher habe ich eine Wrapperklasse erstellt, die die Ausnahmen behandelt und sie sofort protokolliert. Daher gibt es in meinem Hauptbereich keine Ausnahmebehandlung. Ich rufe einfach eine Methode auf und mache etwas.

Einfache Bedienung: Ich kann das Objekt einfach initiieren. Normalerweise besteht die Startphase aus vielen Schritten.

Lesbarkeit des Codes: Wenn ein anderer Programmierer meinen Code öffnet, erscheint der Code sehr klar und leicht zu manipulieren.

Ausblenden der Details: Wenn Sie eine Klasse generieren, die von einem anderen Programmierer verwendet werden soll, können Sie die Details wie "Fehlerbehandlung, Ausnahmebehandlung, Protokollierung von Nachrichten usw." so umbrechen, dass der Programmierer nicht damit umgehen muss Das Chaos benutzt einfach die Methoden.

0

Wrapper-Klassen wurden ins Leben gerufen, um ein Grundbedürfnis von Programmierern zu erfüllen - d. H. Um Grundwerte überall dort zu verwenden, wo nur Objekte zulässig sind. Wie der Name schon sagt, werden Wrapper-Klassen um einen primitiven Wert gewickelt und enthalten den Wert in einem Objekt. Daher können Programmierer jetzt an allen Stellen, an denen Grundelemente nicht zulässig waren (z. B. Generika, Hashmap-Schlüssel, Array-Listen usw.), diese Grundelementwerte als entsprechende Wrapper-Typen angeben.

Darüber hinaus verfügen diese Wrapper-Typen über eine Reihe von Dienstprogrammmethoden zum Konvertieren von primitiven Typen in entsprechende Wrapper-Typen und zurück sowie von Strings in Wrapper-Typen und zurück.

Ich habe in meinem Blog einen ausführlichen Artikel über Wrapper-Klassen verfasst, in dem das Konzept der Wrapper-Typen ausführlich erläutert wird - http://www.javabrahman.com/corejava/Java-wrapper-classes-tutorial-with-examples / (Offenlegung - Dieser Blog gehört mir)

0
Dhruv Rai Puri