Classes Wrapper em Java

Java wrappers são classes que nos permitem tratar um tipo primitivo como um Objeto. Em Java existe um Wrapper para cada um dos 8 tipos primitivos.
Antes de prosseguir, vamos revisar.
Tipos primitivos
Em Java os 8 tipos primitivos são pré-definidos e determinam quanta memória uma variável precisa para armazenar dados. Eles são os blocos básicos para a construção de todos os outros tipos de dados em Java.
Diferentemente de Objetos, tipos primitivos não tem campos ou métodos, eles simplesmente armazenam valores básicos de um tipo específico como números, caracteres ou booleanos.
Classes Wrapper
Instâncias de Wrapper contêm (ou encapsulam) um valor.
O valor é do tipo primitivo associado.
Portanto, Integer encapsula int, e assim por diante.
Classes Wrapper incluem campos extras e métodos. Por exemplo, wrappers numéricos tem um campo para o máximo valor permitido e métodos para converter Strings em números. Como esses campos e métodos fazem parte do core do Java, não precisamos fazer nenhuma importação para utilizá-los.
Para criar um Wrapper, atribuímos um valor primitivo a uma variável criada com o tipo do Wrapper, por exemplo:
Integer age = 12;
Double cost = 150250.55;
Float interest = 5.5f;
Character grade = 'A';
Boolean isActive = true;
Cada classe Wrapper possui um rico conjunto de campos e métodos.
Métodos
Existem métodos para imprimir o valor encapsulado no wrapper.
Outros, como doubleValue e toString, para converter seus valores para outros tipos.
O método compareTo compara o valor empacotado de um objeto wrapper com outro. Ele retorna 0 se os valores são iguais, um número negativo se o valor é maior e um número positivo se o valor é menor.
Métodos estáticos
Classes Wrapper também vem com um conjunto de métodos estáticos.
Métodos estáticos pertencem a classe ao invés das instâncias dessas classes e podem ser chamado antes mesmo de criarmos um objeto dessa classe. São, portanto, chamados pela classe.
Métodos como sum e remainderUnsigned fazem operações matemáticas nos valores primitivos. Métodos adicionais como parseInt e parseBoolean extraem valores primitivos de strings.
Alguns métodos wrapper interessantes:
| Wrapper Method | Returns |
|---|---|
Boolean.logicalAnd(boolean a, boolean b) |
boolean |
Boolean.logicalOr(boolean a, boolean b) |
boolean |
Boolean.parseBoolean(String s) |
boolean |
Character.getNumericValue(char ch) |
Unicode int value of the char |
Character.isDigit(char ch) |
boolean |
Character.isLowerCase(char ch) |
boolean |
Character.isWhitespace(char ch) |
boolean |
Double.parseDouble(String s) |
double |
Double.longValue() |
the Double value, rounded down, as a Long |
Campos estáticos
Classes wrapper normalmente também incluem campos estáticos. Por convenção esses campos são escritos em caixa alta. Classe Wrapper numéricas como Integer, por exemplo, possuem campos estáticos que armazenam o valor máximo e mínimo aceito pelo valor primitivo associado. Classes Wrapper booleanas, por usa vez, possuem campos estáticos para verdadeiro e falso:
System.out.println(Ingeger.MAX_VALUE);
System.out.println(Ingeger.MIN_VALUE);
System.out.println(Boolean.TRUE);
System.out.println(Boolean.FALSE);
A classe Wrapper Caracter para separadores de espaço ou de linha:
System.out.println(Caracter.SPACE_SEPARATOR); Unicode como ' '
System.out.println(Caracter.LINE_SEPARATOR); // Unicode como '\n'
Porque usar wrappers?
Permitem que um tipo primitivo seja tratado como um objeto.
Permitem que métodos e campos sejam associados ao tipo.
Permitem inserir tipos primitivos em objetos de coleção do Java.
Podem ter valor nulo
Enquanto variáveis primitivas sempre têm um valor padrão, mesmo quando não são atribuídas explicitamente. Uma instância de wrapper ou variável estática também pode ser nula e seu valor atribuído posteriormente.



