<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentários sobre: Não posso descobrir nem instanciar tipos genéricos! Porque?</title>
	<atom:link href="http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Wed, 16 May 2012 20:16:36 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Por: Customizando a produção de dependências no CDI &#124; blog.caelum.com.br</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-84980</link>
		<dc:creator>Customizando a produção de dependências no CDI &#124; blog.caelum.com.br</dc:creator>
		<pubDate>Thu, 14 Jul 2011 11:22:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-84980</guid>
		<description>[...] receber a classe como parâmetro porque o tipo do T não é mantido no bytecode. É a conhecida erasure. Agora que temos o DAO genérico, podemos pedir para o Weld injeáa-lo, ao [...]</description>
		<content:encoded><![CDATA[<p>[...] receber a classe como parâmetro porque o tipo do T não é mantido no bytecode. É a conhecida erasure. Agora que temos o DAO genérico, podemos pedir para o Weld injeáa-lo, ao [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alexandre Saudate</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-48260</link>
		<dc:creator>Alexandre Saudate</dc:creator>
		<pubDate>Thu, 02 Oct 2008 12:41:49 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-48260</guid>
		<description>Corrigindo, comentário do Marcelo Manzan</description>
		<content:encoded><![CDATA[<p>Corrigindo, comentário do Marcelo Manzan</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Alexandre Saudate</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-48259</link>
		<dc:creator>Alexandre Saudate</dc:creator>
		<pubDate>Thu, 02 Oct 2008 12:41:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-48259</guid>
		<description>Faço coro com o comentário do Paulo Silveira. O JBoss Seam utiliza uma estrutura parecida para gerenciar entidades persistentes. Se quiserem saber do que estou falando, vejam a classe EntityHome, do Seam.</description>
		<content:encoded><![CDATA[<p>Faço coro com o comentário do Paulo Silveira. O JBoss Seam utiliza uma estrutura parecida para gerenciar entidades persistentes. Se quiserem saber do que estou falando, vejam a classe EntityHome, do Seam.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Anselmo Battisti</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-47463</link>
		<dc:creator>Anselmo Battisti</dc:creator>
		<pubDate>Sat, 06 Sep 2008 15:13:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-47463</guid>
		<description>Parabéns foi de grande valia seu post, muito obrigado!</description>
		<content:encoded><![CDATA[<p>Parabéns foi de grande valia seu post, muito obrigado!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Manzan</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-38309</link>
		<dc:creator>Marcelo Manzan</dc:creator>
		<pubDate>Fri, 16 May 2008 18:37:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-38309</guid>
		<description>É... inevitavelmente é precido estender a classe. Seria até melhor considerá-la abstrata na definição, evitando seu uso direto e obtendo erro apenas em tempo de execução. Isso pode ser incômodo, mas nem sempre...

Abraços!

PS.: Eu desconhecia o artigo anterior :-)</description>
		<content:encoded><![CDATA[<p>É&#8230; inevitavelmente é precido estender a classe. Seria até melhor considerá-la abstrata na definição, evitando seu uso direto e obtendo erro apenas em tempo de execução. Isso pode ser incômodo, mas nem sempre&#8230;</p>
<p>Abraços!</p>
<p>PS.: Eu desconhecia o artigo anterior <img src='http://caelum.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Paulo Silveira</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-38305</link>
		<dc:creator>Paulo Silveira</dc:creator>
		<pubDate>Fri, 16 May 2008 18:16:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-38305</guid>
		<description>Ola Mazan!

Isso é o que esta descrito aqui:
http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/

Mas pra isso voce vai precisar estender a classe... um tanto incomodo.</description>
		<content:encoded><![CDATA[<p>Ola Mazan!</p>
<p>Isso é o que esta descrito aqui:<br />
<a href="http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/" rel="nofollow">http://blog.caelum.com.br/2006/10/29/brincando-com-generics-o-bizarregenericdao/</a></p>
<p>Mas pra isso voce vai precisar estender a classe&#8230; um tanto incomodo.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Marcelo Manzan</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-38304</link>
		<dc:creator>Marcelo Manzan</dc:creator>
		<pubDate>Fri, 16 May 2008 18:12:23 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-38304</guid>
		<description>Um exemplo que pode dar certo.
&lt;code&gt;
public class Dao&lt;T&gt; {
	private Class&lt;?&gt; paramType;

	public Dao() {
		this.paramType = (Class&lt;?&gt;) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
	}
	@SuppressWarnings(&quot;unchecked&quot;)
	public T cria() throws Exception {
		return (T) this.paramType.newInstance();
	}
}
&lt;/code&gt;

Isso funciona bem, e pode ajudar a sanar algumas necessidades.
Abraços.</description>
		<content:encoded><![CDATA[<p>Um exemplo que pode dar certo.<br />
<code><br />
public class Dao&lt;T&gt; {<br />
	private Class&lt;?&gt; paramType;</p>
<p>	public Dao() {<br />
		this.paramType = (Class&lt;?&gt;) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];<br />
	}<br />
	@SuppressWarnings("unchecked")<br />
	public T cria() throws Exception {<br />
		return (T) this.paramType.newInstance();<br />
	}<br />
}<br />
</code></p>
<p>Isso funciona bem, e pode ajudar a sanar algumas necessidades.<br />
Abraços.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Paulo Silveira</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-37729</link>
		<dc:creator>Paulo Silveira</dc:creator>
		<pubDate>Fri, 09 May 2008 01:50:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-37729</guid>
		<description>Ola Ronildo

Parece um tanto estranho voce ter de receber um objeto para poder listar todos aqueles objetos, nao concorda? Exemplo: Num Dao de funcionario generico, pra listar TODOS os funcionarios, eu preciso passar um como argumento.

E como ficaria para ler um Funcionario? Precisaria receber um ID e outro funcionario!!!!

É possivel sim buscar todos sem passar esse argumento estranho guardando o Class da classe... como no link do dao generico...

abracos!</description>
		<content:encoded><![CDATA[<p>Ola Ronildo</p>
<p>Parece um tanto estranho voce ter de receber um objeto para poder listar todos aqueles objetos, nao concorda? Exemplo: Num Dao de funcionario generico, pra listar TODOS os funcionarios, eu preciso passar um como argumento.</p>
<p>E como ficaria para ler um Funcionario? Precisaria receber um ID e outro funcionario!!!!</p>
<p>É possivel sim buscar todos sem passar esse argumento estranho guardando o Class da classe&#8230; como no link do dao generico&#8230;</p>
<p>abracos!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: ronildo braga</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-37721</link>
		<dc:creator>ronildo braga</dc:creator>
		<pubDate>Thu, 08 May 2008 23:38:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-37721</guid>
		<description>Paulo

Ei li os seus artigo, e depois li o artigo do GenericDao do hibernate e me ficou a impressão que não é possivel criar um método generico para buscar todos os registros.

A solução do hibernate me parece muito complicada, não seria mais facil fazer desta forma?
public List listAll(T entity){
     Criteria crit = getSession().createCriteria(entity.getClass());
...
}</description>
		<content:encoded><![CDATA[<p>Paulo</p>
<p>Ei li os seus artigo, e depois li o artigo do GenericDao do hibernate e me ficou a impressão que não é possivel criar um método generico para buscar todos os registros.</p>
<p>A solução do hibernate me parece muito complicada, não seria mais facil fazer desta forma?<br />
public List listAll(T entity){<br />
     Criteria crit = getSession().createCriteria(entity.getClass());<br />
&#8230;<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Gabriel</title>
		<link>http://blog.caelum.com.br/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/comment-page-1/#comment-37563</link>
		<dc:creator>Gabriel</dc:creator>
		<pubDate>Wed, 07 May 2008 05:47:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2008/04/28/nao-posso-descobrir-nem-instanciar-tipos-genericos-porque/#comment-37563</guid>
		<description>A solução da herança é boa e eu uso bastante. Por sinal, comecei a usá-la em .NET antes de aplicá-la no Java. Gosto como ela torna o código mais limpo (principalmente as instanciações). Mas insisto que esses joguinhos para descobrir qual o tipo usado num generic tendem a revelar que algo está mal no código. Exceto por algum tipo de framework, a maior parte do código simplesmente não precisa usar isso, nem qualquer forma de reflexão. Se os tipos estão limitando ou sujando o projeto, talvez seja mais natural usar uma linguagem dinâmica, na qual isso seja natural, como Perl.</description>
		<content:encoded><![CDATA[<p>A solução da herança é boa e eu uso bastante. Por sinal, comecei a usá-la em .NET antes de aplicá-la no Java. Gosto como ela torna o código mais limpo (principalmente as instanciações). Mas insisto que esses joguinhos para descobrir qual o tipo usado num generic tendem a revelar que algo está mal no código. Exceto por algum tipo de framework, a maior parte do código simplesmente não precisa usar isso, nem qualquer forma de reflexão. Se os tipos estão limitando ou sujando o projeto, talvez seja mais natural usar uma linguagem dinâmica, na qual isso seja natural, como Perl.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

