Voltar

Do que se trata o artigo: Trata das classes wrappers, que empacotam tipos primitivos, as diferentes maneiras de criar esses objetos, métodos utilitários que são usados principalmente na conversão entre primitivos e Strings e os recursos boxing/unboxing.


Em que situação o tema é útil:
O uso de classes wrappers é importante quando precisamos encapsular tipos primitivos, de modo que eles possam participar de funcionalidades relacionadas à orientação a objetos. Um exemplo disso é seu uso em operações com collections.

Resumo DevMan: Tipos primitivos em Java a tornam uma linguagem híbrida. Porém, as classes wrappers contornam esse problema, pois permitem que tipos primitivos sejam encapsulados e possam ser empregados em operações que exijam o uso de objetos, tais como em collections. Nas versões anteriores a Java 5, no entanto, a utilização desses objetos dava um pouco de trabalho ao programador, que precisava empacotar/desempacotar explicitamente os valores primitivos. Após essa versão de Java, esse processo se tornou automático, sendo chamado de boxing/unboxing. São fundamentalmente esses os tópicos abordados nesta matéria, além da adoção de classes empacotadoras, juntamente com var-args e ampliação, em casos de sobrecarga.

Sempre se ouviu dizer que Java é uma linguagem cujo paradigma é a orientação a objetos. No entanto, também se sabe que comumente lidamos nas aplicações com os tipos denominados primitivos. E lidar com tipos primitivos juntamente com objetos sempre foi uma necessidade do desenvolvedor. Mas, antes de Java 5, tais tipos não poderiam ser adicionados em um ArrayList, por exemplo, pois o método add() desse collection aceita apenas objetos como argumento. Assim, o código da Listagem 1 não funcionará em versões de Java anteriores a 1.5.

Listagem 1. Tentando adicionar um primitivo em um collection.


        int i = 5;
        ArrayList a = new ArrayList();
        a.add(i);
        

A solução para isso é tratar os primitivos como objetos usando o que chamamos classes wrapper (empacotadora). Há uma classe wrapper correspondente a cada tipo primitivo em Java. Uma classe empacotadora encapsula um único valor de um tipo de dado primitivo. Por exemplo, a classe Integer deve tratar um valor int.

Uma outra situação em que as classes wrapper são úteis é quando precisamos converter um objeto em um tipo de dado primitivo. Por exemplo, digamos que em nossa aplicação, uma interface gráfica do usuário solicite que seja digitada a idade de uma pessoa em uma caixa de texto JTextField. Contudo, sabemos que caixas de textos retornam seu conteúdo em uma String, o que requer uma conversão para int de maneira que possamos realizar cálculos com a idade na aplicação.

Para completar os casos que justificam o uso de classes empacotadoras, citamos o fato de que os primitivos não têm métodos. Os métodos relacionados a um tipo primitivo encontram-se na classe wrapper correspondente. Dessa forma, se for necessário manipular um tipo primitivo em nossa aplicação, devemos consultar a documentação da classe empacotadora referente ao tipo, para verificar se a operação que desejamos é oferecida por algum método da classe.

As classes wrapper existem desde a versão 1.1 da linguagem, mas só a partir da versão 1.5 que foram implementados os recursos de boxing e unboxing, que estudaremos neste artigo. Além disso, iremos apresentar o uso dessas classes em situações como: instanciação, sobrecarga e conversão de tipos, entre outras. Veremos que os recursos de boxing e unboxing são os que permitem que o código da Listagem 1 funcione nas versões mais recentes de Java.

Visão geral das classes wrapper

Cada tipo primitivo em Java possui uma classe empacotadora correspondente. Por exemplo, a classe wrapper para int é Integer, para float é Float, e assim por diante, conforme pode ser visto na Tabela 1. Observe que o nome do tipo primitivo é simplesmente o mesmo nome da classe wrapper em minúsculas, exceto o tipo char, que corresponde a Character, e int, cuja classe correspondente é Integer. Na Tabela 1 podemos observar também quais os possíveis argumentos que podem ser passados ao construtor de cada classe.

Tabela 1. Classes wrapper e seus construtores.
Primitivo Classe Wrapper Argumentos do construtor
boolean Boolean boolean ou String
Byte Byte byte ou String
Char Character char
double Double double ou String
Float Float float, double ou String
Int Integer int ou String
Long Long long ou String
short Short short ou String

As classes wrapper são parte do pacote java.lang, o qual é importado por default em todos os programas Java. Dessas classes, as numéricas – Byte, Short, Integer, Long, Float e Double – estendem a classe Number. Number é uma classe abstrata e também é superclasse de ...

Quer ler esse conteúdo completo? Tenha acesso completo