Qu'est ce qu'une classe wrapper?

Qu'est-ce qu'une classe d'emballage?

En quoi ces cours sont-ils utiles?

197
demandé sur Patrick McDonald 2009-05-20 21:16:15

17 réponses

En général, une classe wrapper est toute la classe qui "enveloppe" ou "encapsule" les fonctionnalités d'une autre classe ou d'un composant. Ceux-ci sont utiles en fournissant un niveau d'abstraction à partir de la mise en œuvre de la classe ou du composant sous-jacent; par exemple, les classes d'enrubannage que wrap COM components peut gérer le processus d'invoquer le composant COM sans déranger le code appelant avec lui. Ils peuvent également simplifier l'utilisation de l'objet sous-jacent en réduisant le nombre d'interface points en jeu; souvent, cela permet une utilisation plus sûre des composants sous-jacents.

156
répondu Paul Sonier 2009-05-20 17:19:59

c'est exactement ce que l'on dirait: une classe qui" enveloppe " la fonctionnalité d'une autre classe ou API dans une API plus simple ou simplement différente.

voir: dessin D'Adaptateur , dessin de façade

64
répondu Shog9 2009-05-20 17:18:10
Les classes D'enrubannage

permettent d'utiliser des types primitifs comme objets. Pour chaque primitif, nous avons une classe d'emballage telle que,

int Integer
byte Byte 

entier et Byte sont les classes d'enveloppe des int et byte primitifs. Il y a des temps/restrictions quand vous avez besoin d'utiliser les primitives comme objets pour que les classes wrapper fournissent un mécanisme appelé boxe/unboxing.

Concept peut être bien compris par l'exemple suivant comme

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

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

donc c'est la façon , nous pouvons utiliser le type de classe wrapper pour convertir en d'autres types primitifs aussi bien. Ce type de conversion est utilisé lorsque vous avez besoin de convertir un type primitif de l'objet et de les utiliser pour obtenir d'autres primitives.Bien que cette approche , vous devez écrire du code . Toutefois, la même chose peut être réalisée avec la technique de coulée simple comme code snippet peut être réalisé comme ci-dessous

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

bien que la valeur double soit explicitement converti à valeur entière, aussi appelée passer.

38
répondu SBTec 2017-10-07 11:22:37

une classe d'emballage n'a pas nécessairement besoin d'emballer une autre classe. Il peut s'agir d'une fonctionnalité d'enveloppement de classe API dans, par exemple, un fichier dll.

par exemple, il pourrait être très utile de créer une classe dll wrapper, qui prend soin de toutes les méthodes dll initialisation et nettoyage et créer des méthodes de classe qui enveloppent les pointeurs de fonction créés à partir par exemple GetProcAddress() .

santé !

17
répondu ralphtheninja 2018-03-25 23:45:11

une classe d'emballage est une classe qui" enveloppe " quelque chose d'autre, tout comme son nom.

la définition la plus formelle serait une classe qui implémente le modèle D'Adaptateur . Cela vous permet de modifier un ensemble D'API dans une forme plus utilisable et lisible. Par exemple, en C#, si vous voulez utiliser L'API Windows native, cela aide à l'intégrer dans une classe qui respecte les directives de conception .NET.

8
répondu Reed Copsey 2009-05-20 17:18:52

il existe plusieurs modèles qui peuvent être appelés classes wrapper.

voir ma réponse à " en quoi les motifs Proxy, décorateur, adaptateur et Pont diffèrent-ils? "

8
répondu Bill Karwin 2017-05-23 12:10:10

il pourrait également être utile de noter que dans certains environnements, une grande partie de ce que les classes d'enrubannage peuvent faire est remplacée par des aspects.

EDIT:

en général, un wrapper va développer ce que le wrappee fait, sans se soucier de la mise en œuvre du wrappee, sinon il n'y a pas de raison de l'envelopper par rapport à étendre la classe wrapped. Un exemple typique est d'ajouter des informations de synchronisation ou une fonctionnalité de journalisation autour d'un autre interface de service, plutôt que de l'ajouter à chaque mise en œuvre de cette interface.

cela finit alors par être un exemple typique de programmation D'Aspect. Plutôt que de passer par une fonction d'interface par fonction et d'ajouter la journalisation boilerplate, dans la programmation d'aspect vous définissez un pointcut, qui est une sorte d'expression régulière pour les méthodes, puis déclarez les méthodes que vous voulez avoir exécutées avant, après ou autour de toutes les méthodes correspondant au pointcut. C'est probablement il est juste de dire que la programmation d'aspect est une sorte d'utilisation du modèle de décorateur, pour lequel les classes d'enrubannage peuvent également être utilisées, mais que les deux technologies ont d'autres utilisations.

7
répondu Jherico 2009-05-20 18:57:15

Wrapper class est une classe qui enveloppe l'autre classe et fournit l'abstraction entre le client et la classe originale étant enveloppé.

7
répondu Rakesh verma 2011-09-09 05:11:15

une classe d'emballage est habituellement une classe dont un objet est une propriété privée. le wrapper implémente L'API de cet objet privé et peut donc être passé comme un argument où l'objet privé le ferait.

dites que vous avez une collection, et vous voulez utiliser une sorte de traduction lorsque des objets sont ajoutés à elle - vous écrivez une classe d'emballage qui a toutes les méthodes de la collection. quand add () est appelé, le wrapper traduit les arguments au lieu de les passer simplement. dans la collection privée.

l'emballage peut être utilisé n'importe où dans une collection, et l'objet privé peut encore avoir d'autres objets qui s'y réfèrent et qui le lisent.

5
répondu Amir Arad 2009-05-20 17:25:44

Une classe wrapper est une classe qui est utilisée pour envelopper une autre classe pour ajouter une couche d'indirection et d'abstraction entre le client et la classe d'origine de l'envelopper.

3
répondu Andrew Hare 2009-05-20 17:18:39

Wrapper class est un wrapper autour d'un type de données primitif. Il représente les types de données primitifs dans leurs instances de classe correspondantes, par exemple un type de données booléen peut être représenté comme une instance de classe booléenne. Toutes les classes d'enrubannage primitives de Java sont immuables, c'est-à-dire qu'une fois assignée une valeur à une instance de classe d'enrubannage, elle ne peut plus être modifiée.

3
répondu David 2011-07-04 08:14:17

programmation Java fournit une classe wrapper pour chacun des types de données primitifs, convertir des types de données primitifs correspondent à l'objet de la classe wrapper.

3
répondu THOSEEF PASHA 2012-05-01 12:42:22

pour faire un bien-être de classe d'emballage n'est pas un travail facile. Comprendre comment une classe d'emballage est conçue par d'autres n'est pas une tâche facile. Parce que c'est une idée, pas un code. Seulement quand vous comprenez l'idée, vous pouvez comprendre wrapper.

1
répondu Tony 2014-11-18 03:14:38

les classes D'enrubannage ont vu le jour pour répondre à un besoin fondamental des programmeurs - c'est-à-dire d'utiliser des valeurs primitives là où seuls les objets sont autorisés. Comme leur nom suggère wrapper classes envelopper autour d'une valeur primitive et tenir la valeur dans un objet. Ainsi, tous les endroits où les primitifs n'étaient pas autorisés - tels que les génériques, les touches hashmap, les Arraylists etc-les programmeurs ont maintenant une option de fournir ces valeurs primitives comme leurs types de wrapper correspondants.

In ajout ces types de wrapper ont un certain nombre de méthodes d'utilité pour convertir du type primitif aux types de wrapper correspondants et en arrière, et aussi des chaînes aux types de wrapper et en arrière.

j'ai écrit un article détaillé sur les classes d'emballage dans un mon blog qui explique le concept de types d'emballage en profondeur - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples / (Divulgation de Ce blog est la propriété par moi)

0
répondu Dhruv Rai Puri 2015-11-03 06:23:57

j'ai actuellement utilisé une classe wrapper pour mon projet et les principaux avantages que j'obtiens (juste un seul avantage pour élargir l'explication du sujet):

gestion des exceptions: ma classe principale, qu'une autre classe enroule, a des méthodes qui lancent des exceptions si elles se produisent, donc j'ai créé une classe d'enrubannage qui gère les exceptions et les enregistre immédiatement. Donc, dans mon champ d'action principal, il n'y a pas d'exception. J'appelle juste une méthode et je fais quelque chose.

Easy Utilisation: je peux facilement lancer l'objet. Normalement, la phase de lancement comporte de nombreuses étapes.

lisibilité du Code: Lorsqu'un autre programmeur ouvre mon code, le code semblera très clair et facile à manipuler.

Cacher les détails: si vous générez une classe qu'un autre programmeur va utiliser, alors vous pouvez envelopper les détails comme "gestion des erreurs, gestion des exceptions, journalisation des messages, etc..."pour que le programmeur ne soit pas pour gérer le chaos, il suffit d'utiliser les méthodes.

0
répondu Bahadir Tasdemir 2015-11-20 09:27:17

une classe d'emballage est une classe qui sert uniquement à contenir quelque chose et à y ajouter des fonctionnalités. En Java depuis les primitives (comme les ints,les flotteurs,les chars...) ne sont pas des objets, donc si vous voulez les traiter comme un seul, alors vous devez utiliser une classe wrapper. Supposons que vous voulez créer un vecteur d'ints, le problème est un vecteur qui ne contient que des objets et non des primitives. Donc, ce que vous allez faire est de mettre tous les ints dans un emballage entier et utiliser cela. Exemple:

int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
-1
répondu Reza Baradaran Gazorisangi 2015-12-14 14:09:45

une enveloppe est une classe qui est utilisée pour communiquer entre deux applications différentes entre des plates-formes différentes

-7
répondu laxminarayan 2011-09-27 11:46:11