Perché ci sono classi wrapper in Java?

So che cos’è una class wrapper, avvolgono tipi primitivi (ad es. Int, double, ecc.) In oggetti della rispettiva class.

Ma, perché abbiamo bisogno di classi Wrapper in primo luogo? Perché non andare semplicemente con tipi primitivi dove li abbiamo?

Diversi possibili motivi:

  • In modo che un valore nullo è ansible
  • Per includere in una raccolta
  • Per trattare genericamente / polimorficamente come un object insieme ad altri oggetti

Un esempio di quando i wrapper sono usati sarebbe in Collections, puoi avere un ArrayList , ma non un ArrayList stesso con HashMap s ecc. Per ottenere sicurezza del tipo usiamo generici e generici che hanno bisogno di oggetti non primitivi.

Java è un linguaggio di programmazione orientato agli oggetti. Penso che potresti anche chiedere: perché abbiamo i primitivi e perché tutto non è solo un object?

I progettisti Java hanno tenuto i due separati per mantenere le cose semplici. Usi i wrapper quando hai bisogno di tipi che si adattano al mondo orientato agli oggetti, come il polimorfismo, le collezioni, ecc. Usi i primitivi quando hai bisogno di efficienza.

Le classi wrapper vengono utilizzate al posto dei tipi primitivi quando è previsto un object.

Nelle raccolte, ad esempio, un object ArrayList può contenere istanze di qualsiasi sottoclass di Object, ma poiché i tipi primitivi non sono oggetti, non possono essere contenuti in ArrayList.

Le classi wrapper vengono utilizzate per convertire qualsiasi tipo primitivo in un object. I tipi di dati primitivi non sono oggetti, non appartengono a nessuna class, sono definiti nella lingua stessa. Mentre si archiviano in strutture di dati che supportano solo oggetti, è necessario convertire prima il tipo primitivo in object, quindi usiamo la class wrapper.

Classe wrapper:

  1. Java usa tipi primitivi, come int, char, double per contenere i tipi di dati di base supportati dalla lingua.

  2. A volte è necessario creare una rappresentazione dell’object di questi tipi primitivi.

  3. Queste sono classi di raccolta che trattano solo di tali oggetti. Uno ha bisogno di avvolgere il tipo primitivo in una class.

  4. Per soddisfare questa esigenza, java fornisce classi che corrispondono a ciascuno dei tipi primitivi. Fondamentalmente, queste classi incapsulano, o avvolgono, i tipi primitivi all’interno di una class.

  5. Pertanto, vengono comunemente indicati come tipo wrapper. I wrapper di tipo sono classi che incapsulano un tipo primitivo all’interno di un object.

  6. I tipi di wrapper sono Byte, Short, Integer, Long, Character, Boolean, Double, Float.

Java è un linguaggio orientato agli oggetti e come detto tutto in java è un object. Ma per quanto riguarda i primitivi? Sono in qualche modo esclusi dal mondo degli oggetti, cioè non possono partecipare alle attività dell’object, come essere restituiti da un metodo come object, e essere aggiunti a una Raccolta di oggetti, ecc. Come soluzione a questo problema, Java consente di includere le primitive nella famiglia di oggetti utilizzando le cosiddette classi wrapper.

Esistono tre motivi per cui è ansible utilizzare un object numero anziché una primitiva:

  1. Come argomento di un metodo che si aspetta un object (spesso usato quando si manipolano raccolte di numeri).
  2. Per utilizzare le costanti definite dalla class, ad esempio MIN_VALUE e MAX_VALUE, che forniscono i limiti superiore e inferiore del tipo di dati.
  3. Per utilizzare i metodi di class per convertire valori da e verso altri tipi primitivi, per la conversione in stringhe e da stringhe e per la conversione tra sistemi numerici (decimale, ottale, esadecimale, binario).

Fonte da:

Le classi di numeri

Una ragione pragmatica che mi viene in mente è che gli oggetti possono essere nulli, i primitivi non possono *. Se non riesco a garantire che una funzione possa restituire un int, l’utilizzo del wrapper è l’unico modo per gestire l’int che mi aspetto. Autoboxing si prende cura del resto.