¿Qué es una clase wrapper?


¿Qué es una clase wrapper?
¿Cómo son útiles estas clases?

Author: Patrick McDonald, 2009-05-20

17 answers

En general, una clase wrapper es cualquier clase que "envuelve" o "encapsula" la funcionalidad de otra clase o componente. Estos son útiles al proporcionar un nivel de abstracción de la implementación de la clase o componente subyacente; por ejemplo, las clases de envoltura que envuelven componentes COM pueden administrar el proceso de invocar el componente COM sin molestar al código de llamada con él. También pueden simplificar el uso del objeto subyacente al reducir el número de puntos de interfaz implicado; con frecuencia, esto hace que el uso de los componentes subyacentes sea más seguro.

 156
Author: Paul Sonier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 17:19:59

Justo lo que suena: una clase que "envuelve" la funcionalidad de otra clase o API en una API más simple o simplemente diferente.

Ver: Patrón de adaptador, Patrón de fachada

 64
Author: Shog9,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 17:18:10

Las clases Wrapper proporcionan una forma de usar tipos primitivos como objetos. Para cada primitiva , tenemos una clase wrapper como,

int Integer
byte Byte 

Integer y Byte son las clases wrapper de primitive int y byte. Hay momentos / restricciones en los que necesita usar las primitivas como objetos, por lo que las clases wrapper proporcionan un mecanismo llamado boxing/unboxing.

El concepto puede ser bien entendido por el siguiente ejemplo como

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

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

Así que esta es la forma, podemos usar el tipo de clase wrapper para convertir en otros tipos primitivos también. Este tipo de conversión se utiliza cuando necesita convertir un tipo primitivo a objeto y usarlos para obtener otras primitivas también.Aunque para este enfoque, es necesario escribir un código grande . Sin embargo, lo mismo se puede lograr con la técnica de fundición simple como fragmento de código se puede lograr como se muestra a continuación

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

Aunque double value se convierte explícitamente a integer value también llamado como downcasting.

 38
Author: SBTec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 11:22:37

Una clase wrapper no necesita necesariamente envolver otra clase. Podría ser una funcionalidad de empaquetado de clase API en, por ejemplo, un archivo dll.

Por ejemplo, podría ser muy útil crear una clase dll wrapper, que se encargue de toda la inicialización y limpieza de dll y cree métodos de clase que envuelvan punteros de función creados a partir de, por ejemplo, GetProcAddress().

Salud !

 17
Author: ralphtheninja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-25 23:45:11

Una clase wrapper es una clase que "envuelve" algo más, al igual que su nombre.

La definición más formal sería una clase que implementa el Patrón de Adaptador . Esto le permite modificar un conjunto de API en una forma más utilizable y legible. Por ejemplo, en C#, si desea utilizar la API nativa de Windows, le ayudará a empaquetarla en una clase que se ajuste a las directrices de diseño de. NET.

 8
Author: Reed Copsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 17:18:52

Hay varios patrones de diseño que se pueden llamar clases wrapper.

Vea mi respuesta a " ¿En qué difieren los Patrones Proxy, Decorador, Adaptador y Puente?"

 8
Author: Bill Karwin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:10

También podría ser valioso tener en cuenta que en algunos entornos, gran parte de lo que las clases wrapper podrían hacer está siendo reemplazado por aspects.

EDITAR:

En general, un wrapper va a expandir lo que hace el wrappee, sin preocuparse por la implementación del wrappee, de lo contrario no tiene sentido envolver frente a extender la clase wrapped. Un ejemplo típico es agregar información de tiempo o funcionalidad de registro alrededor de alguna otra interfaz de servicio, en lugar de agregándolo a cada implementación de esa interfaz.

Esto termina siendo un ejemplo típico para la programación Aspect. En lugar de pasar por una interfaz función por función y agregar registros repetitivos, en la programación de aspectos define un pointcut, que es una especie de expresión regular para los métodos, y luego declara los métodos que desea ejecutar antes, después o alrededor de todos los métodos que coincidan con el pointcut. Probablemente sea justo decir que la programación aspect es una especie de uso del patrón Decorador, para el cual también se pueden usar clases de envoltura, pero que ambas tecnologías tienen otros usos.

 7
Author: Jherico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 18:57:15

La clase Wrapper es una clase que envuelve la otra clase y proporciona la abstracción entre el cliente y la clase original que se envuelve.

 7
Author: Rakesh verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-09 05:11:15

Una clase wrapper es normalmente una clase que tiene un objeto como propiedad privada. el wrapper implementa la API de ese objeto privado y, por lo tanto, se puede pasar como un argumento donde lo haría el objeto privado.

Digamos que tienes una colección, y quieres usar algún tipo de traducción cuando se agregan objetos a ella - escribes una clase wrapper que tiene todos los métodos de la colección. cuando se llama a add (), el wrapper traduce los argumentos en lugar de simplemente pasarlos al private colección.

El wrapper se puede usar en cualquier lugar donde se pueda usar una colección, y el objeto privado todavía puede tener otros objetos que se refieran a él y lo lean.

 5
Author: Amir Arad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 17:25:44

Una clase wrapper es una clase que se usa para envolver otra clase para agregar una capa de indirección y abstracción entre el cliente y la clase original que se envuelve.

 3
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-20 17:18:39

La clase Wrapper es una envoltura alrededor de un tipo de datos primitivo. Representa tipos de datos primitivos en sus instancias de clase correspondientes, por ejemplo, un tipo de datos booleano se puede representar como una instancia de clase booleana. Todas las clases de wrapper primitivas en Java son inmutables, es decir, una vez asignado un valor a una instancia de clase de wrapper no se puede cambiar más.

 3
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-04 08:14:17

La programación Java proporciona una clase wrapper para cada tipo de datos primitivos, para convertir un tipo de datos primitivo en objeto correspondiente de la clase wrapper.

 3
Author: THOSEEF PASHA,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-01 12:42:22

Hacer una clase wrapper de bienestar no es un trabajo fácil. Entender una clase wrapper cómo está diseñada por otros tampoco es un trabajo fácil. Porque es idea, no código. Solo cuando entiendes la idea, puedes entender wrapper.

 1
Author: Tony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-18 03:14:38

Las clases Wrapper llegaron a existir para satisfacer una necesidad básica de los programadores - es decir, para usar valores primitivos donde solo se permiten Objetos. Como su nombre indica, las clases wrapper envuelven un valor primitivo y mantienen el valor en un objeto. Por lo tanto, todos aquellos lugares donde las primitivas no estaban permitidas - como genéricos, claves de hashmap, Arraylists, etc.-los programadores ahora tienen la opción de proporcionar estos valores primitivos como sus tipos de envoltura correspondientes.

Además estas envolturas los tipos tienen una serie de métodos de utilidad para convertir de tipo primitivo a los tipos de envoltura correspondientes y viceversa, y también de Cadenas a tipos de envoltura y viceversa.

He escrito un artículo detallado sobre las clases de envoltura en mi blog que explica el concepto de tipos de envoltura en profundidad - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples / (Divulgación - Este blog es propiedad mía)

 0
Author: Dhruv Rai Puri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-03 06:23:57

Actualmente utilizo una clase wrapper para mi proyecto y los principales beneficios que obtengo (solo un beneficio para ampliar la explicación del tema):

Manejo de excepciones: Mi clase principal ,que otra clase envuelve, tiene métodos que arrojan excepciones si ocurre alguna, así que creé una clase de envoltura que maneja las excepciones y las registra inmediatamente. Por lo tanto, en mi ámbito principal, no hay manejo de excepciones. Sólo llamo a un método y hago algo.

Fácil uso: Puedo iniciar fácilmente el objeto. Normalmente la fase de inicio se construye de una gran cantidad de pasos.

Legibilidad del código: Cuando otro programador abre mi código, el código parecerá muy claro y fácil de manipular.

Ocultar los detalles: Si está generando una clase que otro programador va a usar, entonces puede envolver los detalles como "manejo de errores, manejo de excepciones, mensajes de registro, etc..."para que el programador no tenga que manejar el caos, simplemente usa los métodos.

 0
Author: Bahadir Tasdemir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-20 09:27:17

Una clase wrapper es una clase que tiene el único propósito de contener algo y agregarle alguna funcionalidad. En Java desde los primitivos(como ints, flotadores, caracteres...) no son objetos así que si quieres tratarlos como uno entonces tienes que usar una clase wrapper. Supongamos que desea crear un Vector de ints, el problema es que un Vector solo contiene Objetos no primitivos. Así que lo que va a hacer es poner todos los ints en una envoltura de enteros y utilizar eso. Ejemplo:

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
Author: Reza Baradaran Gazorisangi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-14 14:09:45

Un wrapper es una clase que se utiliza para comunicarse entre dos aplicaciones diferentes entre diferentes plataformas

 -7
Author: laxminarayan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-27 11:46:11