I tipi Wrapper – Lezione 8 di Java Avanzato

Utilizzare i tipi primitivi come oggetti grazie ai tipi Wrapper

I tipi Wrapper sono il tipo di dati in Java che ingloba (wraps) un valore primitivo all’interno di un oggetto. Ne abbiamo già parlato brevemente nella guida base, riprendiamoli e approfondiamone il discorso.
Sappiamo che il nome di queste classi è identico al tipo primitivo incapsulato ma con la prima lettera in maiuscolo, avremo: Byte, Short, Long, Float, Double, Boolean, Void. Ad eccezione di Integer e Character che oltre alla prima lettera cambiano anche il nome.
Le classi wrapper servono a inscatolare un valore primitivo in un oggetto, ad esempio quando vogliamo inserire dei valori all’interno di una struttura che contiene tipi differenti.

Le classi wrapper sono immutabili, come gli oggetti String, non hanno metodi che permettono di modificarli e di conseguenza sono anche di tipo final.

Tutte le classi wrapper dei tipi primitivi estendono una classe in comune detta Number. Le altre classi estendono direttamente la superclasse Object.

I tipi Wrapper - Lezione 6 di Java Avanzato

La classe Number e i suoi metodi

In particolare, Number è una classe astratta che obbliga a dichiarare i vari metodi per estrarre il valore contenuto della classe. Questi metodi consentono di convertire il valore nel tipo base desiderato:

  public byte biteValue(); // Per estrarre il valore byte dalla classe Byte
  public short shortValue(); // Per estrarre il valore short da Short
  public int intValue(); // Per estrarre il valore int dalla classe Integer
  public long longValue(); // Per estrarre il valore long dalla classe Long
  public float floatValue(); // Per estrarre il valore float da Float
  public double doubleValue(); // Per estrarre il valore double da Double

Se il metodo byteValue() venisse chiamato su un int verrà fatto un cast in automatico, ovviamente è possibile perdita di informazione. Se non esiste un percorso nel grafo dei casting avremo un errore a compilazione.
Per creare un nuovo oggetto viene utilizzato un costruttore che accetta un valore del tipo base corrispondente, ad esempio:

  Integer n = new Integer(2);

Ogni sottoclasse di Number eredita anche un metodo che prende in ingresso un valore corrispondente alla classe e ne restituisce un oggetto wrapper che lo ingloba. Si tratta del metodo statico valueOf:

  Integer n = Integer.valueOf(2);

A differenza del costruttore, l’oggetto restituito non è necessariamente nuovo, dato che gli oggetti wrapper sono immutabili e final potrebbe essere restituito un oggetto già esistente.

Indice Lezione PrecedenteLezione Successiva

Pubblicato in Guide, Java, Programmazione Taggato con: , , , ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*