GENERICS JAVA 5: Usar ou não usar? eis a questão

pessoal comecei a estudar uns códigos que usam genérics, li materiais sobre o assunto…etc…etc…
Mas percebi em vários lugares, e até mesmo aqui no GUJ, vi comentários do tipo “Ainda bem que já colocaram o genérics no java”…outros “pelo amor de Deus, tira o genérics do java”…sabemos q a sun não irá retirar…

Mas e ai? realmente vale a pena usar ou não??

ou depende sempre do velho conselho: “depende muito do teu projeto…” afffff

pergunto se é um padrão a adotar a fundo SEMPRE… ou não adotar…o que me dizem os experientes no assunto…

pelo que estudei e vi até agora, achei muito interessante, mas pela minha falta de prática (ou nenhuma) no generics, não vi os lados ruins…etc…

Vamos lá abram vossos corações…

uai…
n conheco nenhum bom motivo para n usar generics n…
alguem conhece?

Deve-se sim usar os generics. Se vc compilar um código com uma versão do Java maior que a 5.0 vai ver que ele vai te avisar que algumas operações “não seguras” foram detectadas. Se quiser ver os warnings, compila passando o parâmetro -Xlint. Normalmente é pela falta de uso dos tipos genéricos que esses warnings são gerados. A maior vantagem do seu uso é que eles garantem a “integridade” de uma coleção, assegurando que apenas um certo tipo (ou seus subtipos é claro) pode ser inserido naquela coleção. Dei o exemplo das coleções pois é o uso mais comum dos genéricos.

Já teve um post sobre isso aqui no guj, uma pergunta de como usar os mesmos. Muitas pessoas deram dicas, inclusive eu. Dê uma pesquisada.

Abraço!

Pra usar generics não conheço motivos para NÃO usar, agora acento na língua inglesa conheço todos os motivos para não usar… hehehehe

Brincadeiras à parte, eu uso sempre, seja em um mero Iterator, seja na criação de uma super classe pra garantir que as subclasses sejam do tipo esperado…

Devem sim ser usados, mas com moderação

uso muito em conjuntos… fora deles, uso, mas com MUITA MODERAÇÃO.

Eu não acho necessário usar com moderação, pode usar e abusar :slight_smile:

Só vejo um pequeno problema, que é quando você tem declarações muito complexas, usando curingas, "extends", <> aninhados, etc. Aí o código vai ficando um pouco complicado…

Oq vc quer dizer com moderação? :smiley:

Antes de tudo veja os impactos de quem irá implantar o sistema, quem irá manter e se todos que irão desenvolver estão por dentro de como usar generics e se utilizam da maneira mais correta.
Acho que tudo que você irá desenvolver pela 1ª vez nem sempre sai as mil maravilhas… Sempre encontrará falhas e bugs…

[]'s a todos

É bom aprender se for fazer manutenção nos meus programas :stuck_out_tongue:

Também não vejo motivo para não usa-los… Nos meus programas eu uso sempre.

[quote]thingol wrote:
É bom aprender se for fazer manutenção nos meus programas :P[/quote]E pensar duas vzs. se vai conseguir chegar no final do dia sem dor de cabeça…
O generics tai…tem que usar…é pra usar…ou vc. é daqueles que gosta de ficar fazendo typecast/casting até o dia amanhecer…sei lá tem gente que gosta de sofrer…

Antes de perguntar se deve usar, é melhor vc entender porque foi criado: facilitar na codificação
pois não precisa fazer cast e garantir maior segurança naquilo que pode ser inserido num conjunto.
Fora dos conjuntos já entra também na questão de como suas classes são projetadas, e nesse
caso o problema não é o uso ou não dos genéricos, trata-se mais de um problema de design, e
nesse sentido acredito que sempre será possível encontrar melhor solução que criar classes
genéricas. Ou seja, para conjuntos: use, para classes: procure outra solução antes.

abs

ainda não apereceu ng defendendo o NÃO uso de generics… Alguém se habilita? (No Flamewar!!! Yes CURIOSIDADE!!!)

Se eu tenho uma classe abstrata Ponto e duas implementações concretas: PontoInteiro e PontoReal;

Eu gostaria de poder escrever um método que fizesse algo com uma lista de qquer tipo de pontos:

void fazAlgo(ArrayList pontos)
{
para cada ponto em pontos, faça:
ponto.umMetodoQueQquerPontoTem();
}

Gostaria de poder fazer:

imprime(new ArrayList );
imprime(new ArrayList );

Mas usando generics não dá, pois ArrayList não é um ArrayList só pq um PontoInteiro é um Ponto. Tem que deixar de usar os generics.

Isso é um motivo?

Editando: Não, não é motivo pois podemos usar um maravilhoso WildCard no valor de um milhão de reais em barras de ouro que valem mais do que dinheiro.

[quote=heitorzim]
Mas usando generics não dá, pois ArrayList não é um ArrayList só pq um PontoInteiro é um Ponto. Tem que deixar de usar os generics.

Isso é um motivo?

Editando: Não, não é motivo pois podemos usar um maravilhoso WildCard no valor de um milhão de reais em barras de ouro que valem mais do que dinheiro.[/quote]

Pois é. Apenas um void fazAlgo(List<? extends Ponto> pontos) resolve esse seu caso

Generics é 10!

Comecei a conhecer o Generics há mais ou menos uma semana e acho ótimo… Poupa muito código…

Muitas vezes não uso pois meus clientes não possuem um ambiente compativel, do contrário não vejo problema.

Vcs tão brincando não é? Nunca pensei que fosse encontrar pessoas discutindo sobre a viabilidade do uso de generics. É como se eu tivesse perguntando: Será que é melhor eu especificar vários metodos declararando todos eles, um por um, para fazerem a mesma coisa, ou declarar apenas um metodo já especificando todos os metodos relacionados? A mesma coisa vale pra classes genericas, ao invés de declarar vários tipos declaro apenas um. Genrerics é o que há pow!

Não cara… já ví gente dizendo que não usa, não usa e não usa… hehehehehehehehe fazer o que ?? Acho que tudo é questão de ambiente, tamanho (sistema e equipe), escalabilidade, de um Sistema…

No mais… realmente não vejo motivos maiores para não usar… só acho que a Moderação foi uma boa palavra usada… para Conjuntos não…pode abusar… para classes, os <? extends Algum> cuidado… porque quando é 1 e apenas 1, é bacana, quando essa lista cresce, pode ser confuso…

Abs :wink: