Dúvida - Wrapper/Casting

3 respostas
R

Amigos, gostaria de perguntar se o wrapper é a mesma coisa que casting ou algo parecido, para converter os valores de uma variável primitiva.
Caso não seja, poderiam dar um exemplo para mostrar a diferença entre eles?

Desde já agradeço a atenção!

Atte.: L. Erlacher

3 Respostas

ViniGodoy

Não é. Casting é quando você converte:
a) Um valor primitivo em outro primitivo (por exemplo, um double num int);
b) Uma referência de uma classe pai numa classe filha (por exemplo, um Object em uma String);

Caso a conversão não seja possível, o cast dará ClassCastException.

double x = 10.5;
//Casting
int y = (int) x;

Wrapper é uma classe que encapsula alguma estrutura. No caso, você está se referindo ao wrapper de tipo primitivo. De maneira geral, um Wrapper da classe Integer nada mais é do que uma classe assim:

public final class Integer {
     private int valor;
     public Integer(int valor) {
          this.valor = valor;
     }

     public int intValue() {
          return valor;
     }

     public static Integer valueOf(int valor) {
         return new Integer(valor);
     }
}

É claro que a classe mesmo é um pouco mais complexa que isso (deriva de Number, tem mais métodos e gerencia um cache de valores comuns), mas com isso dá para ter uma idéia. Os wrappers foram criados para resolver o problema de que as collections eram de objetos. Portanto, é impossível armazenar um int, double ou qualquer outro valor primitivo num ArrayList ou num HashSet.

A solução encontrada foi óbvia:
1. Cria-se uma classe que contém o valor primitivo dentro (wrapper);
2. Coloca-se objetos dessa classe dentro da coleção;

ArrayList<Integer> lista = new ArrayList<Integer>();
int x = 10; 
Integer xComoObjeto = new Integer(x);
lista.add(xComoObjeto);
Para usar o dado, então, era necessário fazer:
int valor = lista.get(0).intValue();

A partir do Java 5, foi incluído um recurso chamado AutoBoxing e AutoUnboxing. Nada mais é do que colocar o compilador para adicionar todo o código extra para encapsular os tipos primitivos num wrapper e desencapsula-los automaticamente. Assim, é possível escrever:

Integer x = 10;
int y = 5 + x;
Que o compilador automaticamente gera:
Integer x = Integer.valueOf(10);
int y = 5 + x.intValue();

antes de compilar.

Antes do Java 5, éramos obrigados a deixar os wrappers explícitos, como no exemplo que postei acima. Era muito trabalho.

R

Vlw amigo…

Reginildo

Aqui vai uma dica pra você assistir. O video explica as classes wrapper:

Criado 13 de julho de 2014
Ultima resposta 17 de jul. de 2014
Respostas 3
Participantes 3