Foi perguntado na monitoria e a sutileza da diferença torna a pergunta bastante interessante.
ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>(); //declaração válida! pessoas.add(new Pessoa()); //declaração válida! ArrayList<Object> pessoasObject = pessoas; //Esta declaração é válida? Em outras palavras, "ArrayList<Object> é superclasse/supertipo de ArrayList<Pessoa>?" A resposta é NÃO. Vamos supor que este código fosse válido. Até agora temos: ArrayList<Pessoa> pessoas = new ArrayList<Pessoa>(); pessoas.add(new Pessoa()); ArrayList<Object> pessoasObject = pessoas; //esta linha faz com que "pessoasObject" referencie a mesma instância de ArrayList referenciada por "pessoas", ou seja, uma instância de ArrayList<Pessoa> Agora eu tento fazer: pessoasObject.add(new Object()); ou pessoasObject.add(new Carro()); Teoricamente pessoasObject poderia apontar para qualquer coisa, mas não pode na prática. Não pode porque esta referência está apontando para uma instância de ArrayList que SÓ ACEITA PESSOAS (vide primeira linha)! Assim, não podemos adicionar Object ou Carro na instância sendo referenciada por pessoasObject pois esta só aceita instâncias de Pessoa. Esta sutileza faz com que precisemos declarar ArrayList<?> ao invés de ArrayList<Object>. Neste caso, não poderemos adicionar nada pela referência do tipo ArrayList<?> já que não sabemos do que se trata mas podemos acessar os métodos que não utilizam o tipo parametrizado como tipo para os parâmetros. Assim, é diferente dizer que não se pode adicionar Object num ArrayList<?> (que não sabemos do que é) de dizer que não se pode adicionar Object num ArrayList<Object> (que claramente deveria ser possível). Abraço P.S.: Para mais informações sobre Generics: http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Peter P. Lupo Undergraduating in Computer Science DCC/UFRJ MPS.BR Authorized Implementation Practitioner Sun Certified Java Associate http://sites.google.com/site/pplupo Cell. +55 (021) 81742487 --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Comp 2 - Geral" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/comp2-geral?hl=en -~----------~----~----~----~------~----~------~--~---
