Risposte:
In generale, una classe wrapper è qualsiasi classe che "avvolge" o "incapsula" la funzionalità di un'altra classe o componente. Questi sono utili fornendo un livello di astrazione dall'implementazione della classe o componente sottostante; ad esempio, le classi wrapper che avvolgono i componenti COM possono gestire il processo di richiamo del componente COM senza disturbare il codice chiamante con esso. Possono anche semplificare l'uso dell'oggetto sottostante riducendo il numero di punti dell'interfaccia coinvolti; frequentemente, ciò rende più sicuro l'uso dei componenti sottostanti.
Proprio come sembra: una classe che "racchiude" la funzionalità di un'altra classe o API in un'API più semplice o semplicemente diversa.
Le classi wrapper offrono un modo per utilizzare i tipi primitivi come oggetti. Per ogni primitiva, abbiamo una classe wrapper come,
int Integer
byte Byte
Integer e Byte sono le classi wrapper di int e byte primitivi. Ci sono tempi / restrizioni in cui è necessario utilizzare le primitive come oggetti, quindi le classi wrapper forniscono un meccanismo chiamato boxing / unboxing.
Il concetto può essere ben compreso dal seguente esempio come
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
quindi è così che possiamo usare il tipo di classe wrapper per convertire anche in altri tipi primitivi. Questo tipo di conversione viene utilizzato quando è necessario convertire un tipo primitivo in oggetto e utilizzarli per ottenere anche altri primitivi. Tuttavia, per questo approccio, è necessario scrivere un codice grande. Tuttavia, lo stesso può essere ottenuto con la semplice tecnica di casting poiché lo snippet di codice può essere ottenuto come di seguito
double d = 135.0;
int integerValue = (int) d ;
Sebbene il doppio valore sia esplicitamente convertito in valore intero chiamato anche downcasting.
Una classe wrapper non deve necessariamente avvolgere un'altra classe. Potrebbe essere una funzionalità di wrapping della classe API, ad esempio un file dll.
Ad esempio, potrebbe essere molto utile creare una classe wrapper dll, che si occupa di tutte le inizializzazioni e pulizie della dll e di creare metodi di classe che racchiudano i puntatori a funzioni creati da es GetProcAddress()
.
Saluti !
Una classe wrapper è una classe che "avvolge" qualcos'altro, proprio come il suo nome.
La definizione più formale di esso sarebbe una classe che implementa il modello di adattatore . Ciò consente di modificare un set di API in una forma più utilizzabile e leggibile. Ad esempio, in C #, se si desidera utilizzare l'API di Windows nativa, è utile includerla in una classe conforme alle linee guida di progettazione .NET.
Esistono diversi modelli di progettazione che possono essere chiamati classi wrapper.
Vedi la mia risposta a "In che modo differiscono i modelli di proxy, decoratore, adattatore e bridge? "
Potrebbe anche essere utile notare che in alcuni ambienti, gran parte di ciò che potrebbero fare le classi wrapper viene sostituito da aspetti.
MODIFICARE:
In generale un wrapper si espanderà su ciò che fa il wrapper, senza essere preoccupato per l'implementazione del wrapper, altrimenti non ha senso avvolgere o estendere la classe wrapped. Un esempio tipico è quello di aggiungere informazioni di temporizzazione o funzionalità di registrazione attorno ad altre interfacce di servizio, anziché aggiungerle ad ogni implementazione di tale interfaccia.
Questo finisce per essere un tipico esempio di programmazione Aspect. Piuttosto che passare attraverso una funzione di interfaccia per funzione e aggiungendo la registrazione del bollettino, nella programmazione dell'aspetto si definisce un punto di taglio, che è una sorta di espressione regolare per i metodi, e quindi si dichiarano i metodi che si desidera eseguire prima, dopo o intorno a tutti i metodi corrispondenti il punto. Probabilmente è giusto affermare che la programmazione degli aspetti è una sorta di uso del modello Decorator, per il quale possono essere usate anche le classi wrapper, ma che entrambe le tecnologie hanno altri usi.
La classe wrapper è una classe che avvolge un'altra classe e fornisce l'astrazione tra il client e la classe originale che viene spostata.
una classe wrapper è generalmente una classe che ha un oggetto come proprietà privata. il wrapper implementa l'API di quell'oggetto privato e quindi può essere passato come argomento in cui l'oggetto privato sarebbe.
supponiamo di avere una raccolta e di voler utilizzare una sorta di traduzione quando gli oggetti vengono aggiunti ad essa - si scrive una classe wrapper che ha tutti i metodi della raccolta. quando viene chiamato add (), il wrapper traduce gli argomenti invece di passarli nella raccolta privata.
il wrapper può essere usato ovunque una collezione possa essere usata e l'oggetto privato può avere ancora altri oggetti che si riferiscono ad esso e lo leggono.
Una classe wrapper è una classe che viene utilizzata per racchiudere un'altra classe per aggiungere un livello di riferimento indiretto e astrazione tra il client e la classe originale da avvolgere.
La classe wrapper è un wrapper attorno a un tipo di dati primitivo. Rappresenta tipi di dati primitivi nelle rispettive istanze di classe corrispondenti, ad esempio un tipo di dati booleani può essere rappresentato come un'istanza di classe booleana. Tutte le classi wrapper primitive in Java sono immutabili, cioè una volta assegnato un valore a un'istanza della classe wrapper non può essere ulteriormente modificata.
La programmazione Java fornisce una classe wrapper per ogni tipo di dati primitivo, per convertire un tipo di dati primitivo in modo che corrisponda all'oggetto della classe wrapper.
Le classi wrapper sono nate per soddisfare un'esigenza di base dei programmatori, vale a dire utilizzare valori primitivi ovunque siano consentiti solo gli oggetti. Come suggerisce il nome, le classi wrapper avvolgono un valore primitivo e mantengono il valore in un oggetto. Quindi, tutti quei posti in cui le primitive non erano consentite - come generici, chiavi hashmap, arrailisti ecc. - adesso i programmatori hanno la possibilità di fornire questi valori primitivi come tipi di wrapper corrispondenti.
Inoltre, questi tipi di wrapper hanno una serie di metodi di utilità per la conversione dal tipo primitivo ai corrispondenti tipi di wrapper e viceversa, e anche dalle stringhe ai tipi di wrapper e viceversa.
Ho scritto un articolo dettagliato sulle classi wrapper in un mio blog che spiega in profondità il concetto di tipi di wrapper - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (Disclosure - Questo blog è di mia proprietà)
Al momento ho usato una classe wrapper per il mio progetto e i principali vantaggi che ottengo (solo un vantaggio per ampliare la spiegazione dell'argomento):
Gestione delle eccezioni: la mia classe principale, che avvolge un'altra classe, ha metodi che generano eccezioni, se presenti, quindi ho creato una classe wrapper che gestisce le eccezioni e le registra immediatamente. Quindi, nel mio ambito principale, non esiste una gestione delle eccezioni. Chiamo solo un metodo e faccio qualcosa.
Facile utilizzo: posso avviare facilmente l'oggetto. La fase che inizia normalmente è composta da molti passaggi.
Leggibilità del codice: quando un altro programmatore apre il mio codice, il codice sembrerà molto chiaro e facile da manipolare.
Nascondere i dettagli: se stai generando una classe che verrà utilizzata da un altro programmatore, puoi racchiudere i dettagli come "gestione degli errori, gestione delle eccezioni, registrazione dei messaggi e così via" in modo che il programmatore non debba gestire il caos, semplicemente usa i metodi.
Una classe wrapper è una classe che ha il solo scopo di contenere qualcosa e aggiungere alcune funzionalità ad essa. In Java poiché le primitive (come ints, float, chars ...) non sono oggetti, quindi se vuoi trattarli come uno allora devi usare una classe wrapper. Supponiamo di voler creare un vettore di ints, il problema è che un vettore contiene solo oggetti non primitivi. Quindi quello che farai è mettere tutti gli integri in un wrapper Integer e usarlo. Esempio:
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();
un wrapper è una classe che viene utilizzata per comunicare tra due diverse applicazioni tra piattaforme diverse