Classes Wrapper

As classes wrapper em Java têm dois propósitos: prover o mecanismo de envolver valores primitivos em um objeto para que estes possam realizar atividades exclusivas de objetos (como ser adicionados em coleções ou ser retornado de um método que tenha um objeto como valor de retorno); e fornecer uma variedade de funções para os primitivos, como conversões para String ou para diferentes bases (binária, octal e hexadecimal).
Existe uma classe wrapper para cada tipo primitivo. Uma vez declarado o valor de um objeto wrapper, este nunca mais poderá ser mudado. Por exemplo, para o int existe a classe Integer, para o char existe a classe Character, para o long existe a classe Long, etc.

Construtores Wrapper

Todas as classes wraper, exceto Character, fornecem dois construtores: um com um argumento do tipo primitivo, e outro com um argumento do tipo String.
A classe Character fornece apenas um construtor, que leva um char como argumento.
Os construtores da classe Boolean podem receber os valoes true e false ou uma String correspondente a esses valores. Se a String é true (case-insensitive) o retorno será true, se for qualquer outro valor o retorno será false.
Quando as classes wrapper levam uma String como argumento e o valor não corresponde a uma literal válida, ou seja,  não pode ser convertido para o primitivo apropriado, é lançada a exceção NumberFormarException.
Somente a partir do Java 5.0 é possível tratar objetos wrapper como primitivos em expressões condicionais (if, por exemplo), porque o compilador irá automaticamente converter (unbox) o Boolean para um boolean.


public class ClassesWrapper {
      public static void main(String[] args) {
            Integer integer = new Integer(1);
            Integer integer2 = new Integer("1");
            Float flo = new Float(3.5);
            Float flo2 = new Float("3.5");
            Character character = new Character('c');
           
            Boolean bool = new Boolean(true);
            //também retorna retorna true
            Boolean bool2 = new Boolean("true");
           
            Boolean bool3 = new Boolean("false");
            //também retorna retorna false
            Boolean bool4 = new Boolean("teste");
           
            /* a partir do Java 5.0 é possível tratar
             * objetos wrapper como primitivos em
             * expressões condicionais */
            if (bool)
                  System.out.println("teste");
           
            /* quando a String não corresponde a
             * uma literal válida para a classe
             * wrapper a exceção NumberFormarException
             * é lançada */
            Byte bt = new Byte("3.5");
      }    
}


Métodos valueOf()

Os dois métodos static valueOf, fornecidos pela maioria das classes wrapper, trazem uma nova abordagem na criação de objetos wrapper.
Os dois métodos têm uma representação String do tipo primitivo como primeiro argumento, e o segundo método tem um argumento adicional int que indica em qual base (binária, octal ou hexadecimal) o primeiro argumento está representado.


public class TestValueOf {
      public static void main(String[] args) {
            /* o método valueOf possui duas
             * sobrecargas, uma com um argumento
             * String, e outra com dois argumentos:
             * um String e um int (corresponde a base
             * em que se encontra o número) */
            Float f2 = Float.valueOf("3.14f");
            //converte da base dois para a base 10
            Integer i2 = Integer.valueOf("101011", 2);          
      }    
}


Fonte: SCJP Sun Certified Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário