Olá pessoal, tudo bom?
No artigo de hoje falaremos sobre os Wrappers, também conhecidos como empacotadores. Essas classes abrigam os tipos primitivos do Java. Veja na continuação.
Classes Wrappers
As classes wrappers foram concebidas majoritariamente na versão 1.0 da linguagem Java, com o objetivo de constituir classes que abrigassem os tipos primitivos existentes no Java. Como qualquer classe Java, todas as classes wrappers são filhas da classe java.lang.Object, possuindo os métodos básicos dessa classe. Uma definição simplista de uma classe wrapper é:
Uma classe que possui um atributo de um tipo primitivo correspondente, o que permite realizar operações básicas com esse valor.
Existem oito tipos primitivos no Java e cada um desses possui uma classe wrapper, conforme mostra a tabela abaixo:
Tipo Primitivo | Classe Wrapper | Versão do Java |
---|---|---|
boolean | java.lang.Boolean | 1.0 |
byte | java.lang.Byte | 1.1 |
char | java.lang.Character | 1.0 |
double | java.lang.Double | 1.0 |
float | java.lang.Float | 1.0 |
int | java.lang.Integer | 1.0 |
long | java.lang.Long | 1.0 |
short | java.lang.Short | 1.1 |
Wrappers são imutáveis…
Um ponto importante a ser observado é que o atributo interno do tipo primitivo é final, ou seja imutável. Uma vez atribuído um valor a esse atributo, não será possível modificá-lo. Assim podemos convencionar que todas as classes wrappers são imutáveis. Dessa forma, podemos evitar alguns erros ao tentar atribuir um valor novo.
Outro aspecto é que devido a essa natureza o objeto é automaticamente thread-safe, ou seja, inúmeros threads podem agir sobre a instância, mas nenhum pode alterá-lo evitando assim erros de concorrência.
Apoio aos Generics
As classes Wrappers são utilizadas como apoio ao Generics (artigo básico), pois estes não podem ser utilizados a partir de tipos primitivos. Por exemplo, a linha abaixo gera um erro de compilação, já a segunda linha é compilada normalmente:
1 2 |
List<int> numeros = new ArrayList<>(); //ERRO de compilacao List<Integer> numeros = new ArrayList<>(); // OK |
Instanciando…
Existem algumas formas de criar uma instância de uma classe Wrapper.
Esse processo de criação é facilitado por um conceito chamado de Autoboxing, o qual permite a modificação dos valores entre o tipo primitivo e sua classe wrapper automaticamente pelo Java.
As formas de criar uma instancia de uma classe Wrapper, basicamente são as seguintes:
1 2 3 |
Long var1 = 100L; Long var2 = new Long(100L); Long var3 = new Long("100"); |
A linha 1 mostra a atribuição do valor primitivo diretamente a classe wrapper.
A linha 2 mostra o envio do valor primitivo via construtor da classe wrapper.
A linha 3 mostra o envio de uma string com o valor via construtor da classe wrapper.
Outros pontos interessantes
Todos os wrappers definem constantes com valores comuns, como TRUE e FALSE no Boolean, MIN_VALUE e MAX_VALUE nos valores numéricos, permitindo a utilização destas para algumas validações.
Classes Wrappers podem ser utilizadas para converter String <-> tipos primitivos, através dos métodos parse* e valueOf. O primeiro recebe uma String e retorna o tipo primitivo e o segundo recebe uma String e retorna uma instância de wrapper.
finnaly{
Mais detalhes sobre cada tipo de wrapper serão dissecados em artigos futuros.
Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!
Até um próximo post!
Leave a Reply