generics duvida  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

ae pessoal lendo o livro da kathy cap 7, nao conseguir entender a ideia de generics.. muito completo.. alguem pode me ajudar em entender sua essencia.. e tem diferente em usar <E> e usar <T>... a questao do uso do coringa <?> aff.. peguei o livro deitel.. ta me clareando..amis com muita duvida.. a kathy confude o generics com array depois com polimorfismo q respectivamente fala de herança.. quem puder me ajudar fico agradecido mesmo.. generics ta me deixando em depressao..qdo li sobre o assunto.. acho que nem "olá mundo" eu nao sei mais fazer..

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/
[WWW]
jeffersonsilvadeamorim
Debugger

Membro desde: 26/03/2006 11:26:07
Mensagens: 72
Localização: Recife - PE
Offline

O principal objetivo de Generics Types é conceder uma forte segurança em relação aos tipos em tempo de compilação.

Por exemplo:



Se vc observar o código acima, verá que não tem como garanti qual tipo de objeto está sendo adicionado à List em tempo de compilação. Mas com generics vc pode fazer isso.

Por exemplo:



No caso acima a List não aceita elementos do tipo Double, Date ou qualquer outro tipo que não seja subtipo do tipo String.

Lembre-se:

Ao declarar uma interface ou classe genérica da seguinte forma:



e depois quando vc a utiliza



Na interface ou classe os E's serão substituídos por String's



O caso do <E> e o <T> é somente uma convenção. O <E> significa ELEMENTO e é usado na declaração de Coleções genéricas e o <T> significa TIPO e é usado em declaração de Classes genéricas que não são Coleções.

O <?> é usado para declarar variáveis locais ou atributos. Quando vc declara um atributo da seguinte forma:



Você tá dizendo que esse atributo aceitará qualquer referência do tipo List<"qualquer classe que herde de Object">. Por exemplo:



Mas quando vc realiza uma declaração desse tipo:



é o mesmo q declarar desta maneira:



ps: Vc pode substituir o Object por qualquer outra classe ou interface, mas isso mudará a semântica da questão.

Ao utilizar essa declaração (seja com extends ou sem), vc não poderá modificar a referência de nenhum modo.

Qualquer dúvida post aew!!
Espero ter ajudado!!
Flw aew e t+!!

Cursando - Engenharia da computação - UPE
SCJP 5.0 - 94%, SCWCD 5.0 - 91%, SCBCD 5.0 - 83%
Programa de qualificação tecnológica(PQT) - Perfil: Engenheiro de Processos - QUALITI
Perfil: Desenvolvedor de aplicações corporativas e web Java - QUALITI
Técnico em desenvolvimento de sistemas - SENAC
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

entao seria para garantir um valor passado para um argumento de uma lista? ou conjuto?
nao entendi paenas o final qdo vc fala:

"Ao utilizar essa declaração (seja com extends ou sem), vc não poderá modificar a referência de nenhum modo.
"


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/
[WWW]
jeffersonsilvadeamorim
Debugger

Membro desde: 26/03/2006 11:26:07
Mensagens: 72
Localização: Recife - PE
Offline

entao seria para garantir um valor passado para um argumento de uma lista? ou conjuto?


Sim. Mas entenda!! Você verá que Generics é muito usado em coleções, mas ele não está limitado a isso somente!! Dependo do problema, vc poderá criar classes utilizando Generics para facilitar sua vida no futuro!! Na certificação eles cobram na maioria dos casos em nível de Collections.

nao entendi apenas o final qdo vc fala:

"Ao utilizar essa declaração (seja com extends ou sem), vc não poderá modificar a referência de nenhum modo.
"


Tudo bem!!

Exemplo:



O código acima mostra um método chamado add, que possui 2 parâmetros, sendo um do tipo List<?> e outro do tipo Object. A declaração genérica List<?> como nós vimos anteriormente é igual à List<? extends Object> e esse tipo de declaração possui uma peculiaridade que seria não permitir a modificação do objeto list no nosso caso. Mas como nós estamos vendo, o método está tentando adicionar um Object à List e isso não é permitido!!

Espero ter ajudado!!
Flw aew e t+!!

Cursando - Engenharia da computação - UPE
SCJP 5.0 - 94%, SCWCD 5.0 - 91%, SCBCD 5.0 - 83%
Programa de qualificação tecnológica(PQT) - Perfil: Engenheiro de Processos - QUALITI
Perfil: Desenvolvedor de aplicações corporativas e web Java - QUALITI
Técnico em desenvolvimento de sistemas - SENAC
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

humse usar o <? extends...>

nao posso alterar o estado do objeto seria isso?

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/
[WWW]
jeffersonsilvadeamorim
Debugger

Membro desde: 26/03/2006 11:26:07
Mensagens: 72
Localização: Recife - PE
Offline

Exatamente!! Vc não poderá modificá-lo!! Aew existe um outro recurso, que seria o <? super Classe/Interface>. Por exemplo:



Nesse caso, quando vc declara o List com o <? super String>, vc tá dizendo que ali você pode receber qualquer objeto do tipo List<String ou qualquer super classe dela>, ou seja, List<Object> ou List<String>.

Espero ter ajudado!!
Flw aew e t+!!

Cursando - Engenharia da computação - UPE
SCJP 5.0 - 94%, SCWCD 5.0 - 91%, SCBCD 5.0 - 83%
Programa de qualificação tecnológica(PQT) - Perfil: Engenheiro de Processos - QUALITI
Perfil: Desenvolvedor de aplicações corporativas e web Java - QUALITI
Técnico em desenvolvimento de sistemas - SENAC
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

hum saquei valeu!!! pela ajuda ai!!

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/
[WWW]
Paulo Jr
HelloWorld

Membro desde: 27/09/2006 10:03:02
Mensagens: 12
Offline

Galera, desculpe desenterrar esse tópico q já é meio antigo, mas caiu como uma luva pra mim.

Estou implementando uma classe abstrata para e tem um método que deve retornar o tipo da classe genérica passa, mas não consigo fazer isso. E também não consigo passar para um método a classe genérica. Como eu poderia fazer isso?
As partes acima me ajudaram pra caramba, aguardo ai quem poder e também, se vc poder dar uma breve explicação ao colocar a idéia de correção, agradeço mermo... só o filé!

Meu método da classe abstrata:



vlw ai, desde já..
marcos.macedo
Thread.start()

Membro desde: 23/08/2007 16:15:30
Mensagens: 32
Offline

Acho que o que voce quer é:



Voce confundiu um pouco a sintaxe.
Tambem nao pode ler o class de um generics por causa de um conceito chamado de Type Erasure. Por isso eu peguei o class no construtor.

Espero que ajude.
Paulo Jr
HelloWorld

Membro desde: 27/09/2006 10:03:02
Mensagens: 12
Offline

Caro Marcos..

Era isso mesmo.. só me faltava entender a idéia do generics no retorno, agora eu sei. hehehe

Vlw ai a dica e a ajuda.

Abços..
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team