| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 03:04:25
|
Puppets
Virtual Machine Man
![[Avatar]](/images/avatar/6c7a107981f9c2a0ed55efce297bd1e2.png)
Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline
|
O que é wrapper..? so sei que java oferece 8 classes wrapper mais o que é isto..?
|
Nunca desista antes de conseguir. |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 03:09:18
|
Abdon
JavaEvangelist
![[Avatar]](/images/avatar/c8b981953fcc0fea05c8c.jpg)
Membro desde: 02/09/2003 15:50:05
Mensagens: 363
Localização: São Paulo
Offline
|
Wrapper são as classes que representão tipos primitivos.
Integer
Long
Float
Bollean
Byte
Void
Double
Short
|
What I like about you?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 11:43:33
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Wrapper é um nome adicional ao Pattern decorator.
Basicamente, um decorator permite que você adicione funcionalidade a um objeto (ou tipo primitivo) dinamicamente. Você cria uma nova classe, que "envolve" a classe original e adiciona funcionalidade. O verbo envolver em inglês é "wrap".
O java possui 8 wrappers para tipos primitivos que adicionam a funcionalidade de tratar tipos primitivos como classes. Quando você faz um:
Integer i = Integer.valueOf(2);
Você está criando uma classe, que "envolve" o número 2 (primitivo) e adiciona métodos como intValue() nele. Você ainda ganha a funcionalidade de trabalhar com o número 2 como se ele fosse um objeto. O java (a partir da versão 5) é inteligente o suficiente para criar ou desfazer wrappers de tipo primitivo automaticamente (Autoboxing), de tão útil e comum que é essa prática.
Mas esses não são os únicos wrappers que o java possui. Ele ainda possui 6 wrappers adicionais para collections, que as tornam sincronizadas ou imutáveis.
Por exemplo, você pode adicionar sincronização a listas. Todo arraylist não é sincronizado. Entretanto, se quisermos sincronizar um array list podemos fazer:
List minhaLista = Collections.synchronizedList(new ArrayList());
Ou podemos ter uma lista sincronizada e imutável:
Cada decorator desses adicionou uma funcionalidade a mais na lista. A primeira era a sincronização, a segunda imutabilidade.
Se você procurar vai achar ainda mais exemplos de wrappers. Dê uma olhada nos OutputStreams e InputStreams, ou nas classes Reader e Writer...
Existem dezenas de wrappers: para tratar o fluxo de conexões como orientado a objetos (ObjectInputStream), fluxos de audio (AudioInputStream), baseados em tipos primitivos (DataInputStream), ou adicionar buffers (BufferedInputStream) a eles... Todos esses são exemplos de wrappers para o básico e sem funcionalidade InputStream. E o interessante, é que, como demonstrado com as listas, esses wrappers podem ser combinados (pode-se fazer um FileInputStream, associa-lo a um BufferedInputStream e ler dados primitivos dele após associar o resultado a um DataInputStream).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 11:48:38
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Vou dar um exemplo aqui para ficar mais claro.
Como é implementado o Wrapper do synchronized list?
Ele pode ser essa classe:
Agora, sempre que quisermos criar uma lista sincronizada, usamos nosso Wrapper de lista:
E isso é exatamente o que o método Collections.synchronizedList faz. Usa uma classe como essa e gera para você uma lista sincronizada, baseada na sua lista.
O que é importante aqui é você não confundir o padrão Wrapper (Decorator) com os wrappers de tipos primitivos, que são apenas exemplos do uso desse padrão.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 12:57:29
|
Puppets
Virtual Machine Man
![[Avatar]](/images/avatar/6c7a107981f9c2a0ed55efce297bd1e2.png)
Membro desde: 12/12/2006 14:14:55
Mensagens: 508
Localização: Porto Alegre
Offline
|
Intendi cara um exemplo tb é
i=Integer.parseInt(JOptionPane.showInputDialog("Dígite um número"));
sobre synchronized é uma das poucas palavras chave em java que eu não conheço vc me deu uma boa idéia vou estudar synchronized qualquer dúvida eu posto aki no forum
|
Nunca desista antes de conseguir. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 15:31:42
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
Puppets wrote:O que é wrapper..? so sei que java oferece 8 classes wrapper mais o que é isto..?
é vc converte primitivo int, double em objetos Float, Double.. sao diferentes float de Float, lembrar de um velho requisito em java ele diferencia maiusculo de minusculo.. ja começa por ai de float ser diferente de Float.. mais quando usar isso.. com collections no java 5 é um de suas utilidades.. vc quer criar um conjunto de um tipo especifico.. então vc define que vai ser apenas Float, sendo que no java 5 ele faz o AutoBoxing e converte Float em float ai vc pode ter primitivos dentro do seu conjuntos que na verdade é um conjunto de que recebe apenas Float.
Quando estudei pela primeria vez nao conseguir saber a essencia de usar a class Wrapper mais ..a medida que vc avançar seu estudo vai ver que vai usa-la com frequencia.. hehe! em interfaces graficas é bastante utilizada...
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/04/2007 16:14:12
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Puppets wrote:Intendi cara um exemplo tb é
i=Integer.parseInt(JOptionPane.showInputDialog("Dígite um número"));
Nesse caso você não tem um wrapper. Seu método irá retornar um tipo primitivo int, não uma classe que "envolve" outra para adicionar uma funcionalidade.
Veja o caso do BufferedInputStream. Ele tem como parâmetro de construção um InputStream. Logo, ele criará um buffer, para o InputStream que servirá como parâmetro.
O link que eu passei, do wiki, no post acima explica exatamente como funciona o padrão. Por hora, só decore que Wrappers de tipos primitivos são classes que encapsulam um valor e tem o comportamento parecido com o do tipo primitivo em questão. Por exemplo, o tipo primitivo double pode ser "wrapped" numa classe do tipo Double. Nela você encontrará métodos para soma, subtração ou outras coisas que você poderia fazer num double. Além disso, ela poderá ser usada em listas que aceitem Object, já que objetos do tipo Double são objetos comuns e não tipos primitivos.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 14:44:24
|
lucastody
Thread.start()
Membro desde: 27/04/2007 19:04:39
Mensagens: 29
Offline
|
Pessoal, primeiramente, desculpe por mexer num tópico tão antigo. Fiz isso apenas para não precisar criar um novo tópico sendo que muitas das informações desse já me ajudaram, porém, queria saber de uma opinião.
Por exemplo, precisei retornar um Date como String para uma necessidade do projeto. Supondo que se fosse o caso de criar um wrapper para o tipo Date para, em vez de criar um SimpleDateFormat, informar o pattern e obter a data como String, adicionar um método nesse wrapper para que faça isso por mim, seria uma boa idéia, ou um exagero?
tipo:
A princípio eu achei exagero, mas pensando em outras situações de manipulação de Data (ou qualquer outro tipo de dado), em vez de criar classes utilitárias com métodos para fazer isso, poderia ser colocado os métodos nesse wrapper.
O que vcs acham? Simples exagero mesmo ou é por ai?
Vlw
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 14:54:15
|
samykzy
HelloWorld
Membro desde: 26/03/2011 09:58:57
Mensagens: 13
Offline
|
Na minha modesta opinião acho um "exagero", pois não é necessário reinventar a moda, já que é simples converter uma data para string...
Essa é minha opinião
|
Android 3.0 Yeah! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 15:11:39
|
lucastody
Thread.start()
Membro desde: 27/04/2007 19:04:39
Mensagens: 29
Offline
|
samykzy, concordo com você, pois foi a primeira coisa que pensei.
Pedi uma opinião, pois (no caso do Date) já encontrei em projetos (inclusive já fiz =D) classes utilitárias com métodos para truncar data; alterar ano, mês ou dia; retornar como String e por ai vai. Daí estive mexendo com isso hoje e resolvi investigar uma melhor prática, principalmente em relação aos wrappers.
Agradeço sua opinião, abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 15:17:42
|
samykzy
HelloWorld
Membro desde: 26/03/2011 09:58:57
Mensagens: 13
Offline
|
lucastody wrote:samykzy, concordo com você, pois foi a primeira coisa que pensei.
Pedi uma opinião, pois (no caso do Date) já encontrei em projetos (inclusive já fiz =D) classes utilitárias com métodos para truncar data; alterar ano, mês ou dia; retornar como String e por ai vai. Daí estive mexendo com isso hoje e resolvi investigar uma melhor prática, principalmente em relação aos wrappers.
Agradeço sua opinião, abraços
Espero que eu não tenha deixado você "burrado" , é uma opinião minha apenas.
|
Android 3.0 Yeah! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/04/2011 15:19:48
|
lucastody
Thread.start()
Membro desde: 27/04/2007 19:04:39
Mensagens: 29
Offline
|
Que isso, muito pelo contrário, opinião é sempre bem vinda.
Se fosse por isso, nem teria postado.
This message was edited 2 times. Last update was at 01/04/2011 15:20:34
|
|
|
 |
|
|