<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Últimas mensagens do tópico "Generics - Não consigo instanciar o tipo."]]></title>
		<link>http://www.guj.com.br/posts/list/4.java</link>
		<description><![CDATA[Últimas mensagens enviadas no tópico "Generics - Não consigo instanciar o tipo."]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Ola para todos,<br /> <br /> estou com um problema e não estou conseguindo resolver.<br /> <br /> vejam só criei uma classe utilizando generics<br /> <br /> public class Principal&lt;E&gt; extends JPanel implements InitializingBean {<br /> <br /> porem essa mesma classe que eu passo como parametro no generics eu quero chamar uma outra classe com um objeto do tipo E instanciado<br /> <br /> alguem sabe me dizer como eu faço isso??<br /> <br /> eu ja fiz instanciando um Object() com cast em E <br /> <br /> porem tenho meu objeto tem q ser do tipo E e nao java.lang.Object<br /> <br /> se alguem puder me ajudar.<br /> <br /> <br /> grato<br /> <br /> andre]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468240.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468240.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 16:03:24]]> GMT</pubDate>
				<author><![CDATA[ spadinha]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Você não consegue instanciar o tipo E se não tiver um objeto do tipo Class&lt;E&gt;. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468264.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468264.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 16:17:21]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Exemplo, please <img src="http://www.guj.com.br/images/smilies/3b63d1616c5dfcf29f8a7a031aaa7cad.gif" border="0">]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468293.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468293.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 16:43:28]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [code]<br /> package exemplos;<br /> <br /> class Pessoa {<br /> }<br /> <br /> class Funcionario extends Pessoa {<br /> }<br /> <br /> class Diretor extends Funcionario {<br /> }<br /> <br /> // Um exemplo bem simples...<br /> class PlanoSaude&lt;E&gt; {<br /> 	E e;<br /> 	public PlanoSaude() {<br /> 		e = new E(); // Isto é inválido e provoca um erro de compilação<br /> 	}<br /> 	public PlanoSaude(Class&lt;E&gt; klass) throws Exception {<br /> 		e = klass.newInstance();<br /> 	}<br /> }<br /> <br /> <br /> public class RemedioGenerico {<br /> 	public static void main(String[] args) throws Exception {<br /> 		PlanoSaude&lt;Diretor&gt; psd =  new PlanoSaude&lt;Diretor&gt;(); // não funciona devido ao erro de compilação<br /> 		PlanoSaude&lt;Funcionario&gt; psf = new PlanoSaude&lt;Funcionario&gt;(Diretor.class); // não funciona<br /> 		PlanoSaude&lt;Funcionario&gt; psg = new PlanoSaude&lt;Funcionario&gt;(Funcionario.class); // OK<br /> 		PlanoSaude&lt;? extends Funcionario&gt; psh = new PlanoSaude&lt;Diretor&gt;(Diretor.class); // OK<br /> 	}<br /> }<br /> [/code]]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468313.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468313.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 16:56:00]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Ah, eu achei q tivesse uma forma de invocar o new com generics, da mesma forma q se pode fazer em C#<br /> <br /> Mas valeu o exemplo!!]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468326.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468326.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 17:21:12]]> GMT</pubDate>
				<author><![CDATA[ peczenyj]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Esse é um dos motivos que me faz ter saudades das templates do C++...<br /> <br /> A solução com newInstance() pode até funcionar, mas também deve disparar alguns "warnings" na sua cabeça. <br /> Veja os problemas:<br /> 1. O código assume que existe um construtor padrão, e que ele é suficiente;<br /> 2. Se isso mudar, o código não dará erro de compilação, só de execução;<br /> 3. É certamente mais complexo do que um código não-genérico e reflexivo.<br /> <br /> Então, considere com cuidado a possibilidade de não utilizar coisas desse tipo.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468407.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468407.java</link>
				<pubDate><![CDATA[Thu, 10 Apr 2008 22:28:08]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Resolvido !!!<br /> <br /> valew pela ajuda.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468882.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468882.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 15:47:41]]> GMT</pubDate>
				<author><![CDATA[ spadinha]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=ViniGodoy]Esse é um dos motivos que me faz ter saudades das templates do C++...<br /> <br /> A solução com newInstance() pode até funcionar, mas também deve disparar alguns "warnings" na sua cabeça. <br /> Veja os problemas:<br /> 1. O código assume que existe um construtor padrão, e que ele é suficiente;<br /> 2. Se isso mudar, o código não dará erro de compilação, só de execução;<br /> 3. É certamente mais complexo do que um código não-genérico e reflexivo.<br /> <br /> Então, considere com cuidado a possibilidade de não utilizar coisas desse tipo.[/quote]<br /> <br /> Na realidade isso é um tipo de inversão de dependencia e não de genericos. A ideia é plugar a implementação<br /> da classe através da instanciação dela dentro da classe que a contém. É o mesmo principio de E e = new E() que o tingol falou e que se usa muito ainda. <br /> Só que se pensa "se eu passar um classe generica eu posso instancia-la genericamente" quando deveria pensar "eu quero injetar uma implementação de E"  Para isso eu tenho que promover a injeção dessa instancia ou usar um ServiceLocator da vida. É ignorar DI que é errado e não newInstance() ou generics  <img src="http://www.guj.com.br/images/smilies/8a80c6485cd926be453217d59a84a888.gif" border="0"> <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468891.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468891.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 15:58:46]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Ou seja, meu exemplo seria melhor assim:<br /> [code]<br /> PlanoSaude&lt;Funcionario&gt; = new PlanoSaude&lt;Funcionario&gt; (new Diretor());<br /> [/code]<br /> Ou seja, a classe PlanoSaude não deve criar ela mesma os funcionários ou diretores; ela deve receber instâncias dessas classes. <br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468895.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468895.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 16:01:09]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Re:Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Sim, vc está certo.<br /> <br /> Só ressaltei pq se o java suportasse uma construção como:<br /> E e = new E();<br /> <br /> Poderia fazer verificações em tempo de compilação, e testar se E realmente tem um construtor sem qualquer tipo de parâmetros. Coisa que o C# e o C++ fazem muito bem. <br /> <br /> No caso da instanciação com reflection isso não ocorre... se vc fizer caca, o erro vai cair só durante a execução.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468898.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468898.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 16:04:20]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ Depois que o Neal Gafter saiu da Sun (e ele deixou de ser vidraça para ser estilingue <img src="http://www.guj.com.br/images/smilies/69934afc394145350659cd7add244ca9.gif" border="0"> ) , ele sugeriu que essa parte de Generics também aceitasse "reification", ou seja, que o tipo E também estivesse disponível para a classe poder fazer algo como "E e = new E()" e outras coisas.<br /> ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468907.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468907.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 16:12:09]]> GMT</pubDate>
				<author><![CDATA[ thingol]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=thingol]Depois que o Neal Gafter saiu da Sun (e ele deixou de ser vidraça para ser estilingue :P ) , ele sugeriu que essa parte de Generics também aceitasse "reification", ou seja, que o tipo E também estivesse disponível para a classe poder fazer algo como "E e = new E()" e outras coisas.<br /> [/quote]<br /> <br /> Isso é o tipo de gambiarra que o C faz e que fere o conceito OO profundamente. <br /> Se E é uma interface como fica toda esta historia ? O new tem que saber que está chamando uma interface ?<br /> Imaginem <br /> <br /> [code]<br /> PlanoSaude&lt;Funcionario&gt; = new PlanoSaude&lt;Funcionario&gt; (); //(1)<br /> [/code]<br /> com Funcionario sendo interface e <br /> <br /> [code]<br /> <br /> class PlanoSaude&lt;E&gt; {<br /> <br />         E oCara;<br />          PlanoSaude(){<br />                 oCara =  new E();// (2)<br />         }<br /> <br /> }<br /> <br /> [/code]<br /> <br /> Como a linha 1 sabe do erro da linha 2 ? <br /> <br /> É por essas e por outras que erasure é suficiente. Porque dar poder de mais é tornar Java em C++. Ou seja, na linguagem mais baseada em gambiarra que existe. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468933.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468933.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 16:41:23]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=sergiotaborda]<br /> Isso é o tipo de gambiarra que o C faz e que fere o conceito OO profundamente. <br /> [/quote]<br /> <br /> O C não faz, quem faz é o C++.<br /> <br /> Na verdade, não é uma gambiarra. Pq o conceito de templates não foi feito com a intenção de ser compatível com OO. É um paradigma totalmente diferente, chamado Metaprogramação e que, realmente, em muitos casos é contraditório à OO. A comunidade C++ está ciente disso, como você pode ver [url="http://www.artima.com/cppsource/type_erasure.html"]neste artigo aqui[/url]). Essa, na verdade, é a grande característica que difere o C++ de outras linguagens (inclusive o C): a possibilidade de programação multi-paradigma. Além da metaprogramação, o C++ ainda inclui o paradigma estruturado, muito baseado no C.<br /> <br /> Se você ver a programação genérica do C++ vai ver que ela tenta expandir as possibilidades de reuso, estendendo a linguagem C++ e praticamente eliminando a necessidade de tipagem. É justamente o oposto do conceito de generics, que torna a tipagem mais forte e permite que uma classe que, de outra forma seria aberta demais (como a antiga List) fique mais restrita (List&lt;Classe&gt; ou List&lt;? extends Classe&gt; ). <br /> <br /> Tipagem forte é um dos pontos chaves da Orientação a Objetos: na OO, vc define classes, que nada mais são do que tipos fortes e essas classes devem interagir com um grupo restrito de outras classes, também de tipo forte. E o Java é uma linguagem que se orgulha de implementar com grande perfeição o conceito de OO. Por isso, ao meu ver, a implementação dos generics reforçando o conceito de tipos (e não como no C++) foi acertada. Mesmo que a solução final não seja tão poderosa.<br /> <br /> Mas lógico... a interação entre dois paradigmas não é suave. O que é bom num lugar, pode ser radicalmente negativo em outro. E, embora você possa realmente aproveitar os pontos fortes de cada paradigma em diversas situações no C++, vai ter aquelas em que você terá que encarar filosofias inconsistentes. E estou falando de maneiras totalmente diferentes de pensar no problema, não só de mecanismos de programação.<br /> <br /> Será que adicionar tanta complexidade vale a pena? Já vi muitas coisas interessantíssimas que são possíveis com a metaprogramação, que nem sequer passam nos sonhos dos programadores java... mas entre essas coisas, encontram-se erros obscuros também...]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468950.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468950.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 17:29:11]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=sergiotaborda]Se E é uma interface como fica toda esta historia ? O new tem que saber que está chamando uma interface ?[/quote]<br /> <br /> O compilador teria a capacidade de saber no exato momento que você tentasse fazer:<br /> <br /> [code]Classe&lt;Interface&gt; x = new Classe&lt;Interface&gt;();[/code]<br /> <br /> O compilador então acharia dentro do código de classe algo como:<br /> [code]<br /> Interface e = new Interface();  //Antes E e = new E();<br /> [/code]<br /> <br /> E geraria um erro de compilação.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468953.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468953.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 17:34:33]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=ViniGodoy][quote=sergiotaborda]Se E é uma interface como fica toda esta historia ? O new tem que saber que está chamando uma interface ?[/quote]<br /> <br /> O compilador teria a capacidade de saber no exato momento que você tentasse fazer:<br /> <br /> [code]Classe&lt;Interface&gt; x = new Classe&lt;Interface&gt;();[/code]<br /> <br /> O compilador então acharia dentro do código de classe algo como:<br /> [code]<br /> Interface e = new Interface();  //Antes E e = new E();<br /> [/code]<br /> <br /> E geraria um erro de compilação.[/quote]<br /> <br /> Sim, no C++ onde ha substuição sim (é gerado um novo codigo com E subtituido) <br /> Eu estava falando em java em que não ha substituição/geração de codigo.<br /> <br /> Pior, a classe pode ser abstrata e o uso de interface poderia ser feito noutra classe que nem sequer está no projeto. E aí ? ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468974.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468974.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 18:10:39]]> GMT</pubDate>
				<author><![CDATA[ sergiotaborda]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=sergiotaborda][quote=ViniGodoy][quote=sergiotaborda]Se E é uma interface como fica toda esta historia ? O new tem que saber que está chamando uma interface ?[/quote]<br /> <br /> O compilador teria a capacidade de saber no exato momento que você tentasse fazer:<br /> <br /> [code]Classe&lt;Interface&gt; x = new Classe&lt;Interface&gt;();[/code]<br /> <br /> O compilador então acharia dentro do código de classe algo como:<br /> [code]<br /> Interface e = new Interface();  //Antes E e = new E();<br /> [/code]<br /> <br /> E geraria um erro de compilação.[/quote]<br /> <br /> Sim, no C++ onde ha substuição sim (é gerado um novo codigo com E subtituido) <br /> Eu estava falando em java em que não ha substituição/geração de codigo.<br /> <br /> Pior, a classe pode ser abstrata e o uso de interface poderia ser feito noutra classe que nem sequer está no projeto. E aí ? [/quote]<br /> <br /> Bastaria na assinatura da classe parametrizada dizer que o tipo E tem de ser concreto. Adicionando recursos na linguagem, TODOS os problemas que voces citaram, no caso de poder dar new em E, somem, porem aparecem problemas de compatibilidade se voce for permitir o uso dessas classes sem generics.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468978.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468978.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 18:25:11]]> GMT</pubDate>
				<author><![CDATA[ Paulo Silveira]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=ViniGodoy]<br /> Será que adicionar tanta complexidade vale a pena? Já vi muitas coisas interessantíssimas que são possíveis com a metaprogramação, que nem sequer passam nos sonhos dos programadores java... mas entre essas coisas, encontram-se erros obscuros também...[/quote]<br /> <br /> <br /> Cara, pode citar um exemplo?<br /> Algo que passe dos nossos sonhos o.0<br /> Por acaso ele não pensa sózinho, pensa? ^^]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468980.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468980.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 18:32:06]]> GMT</pubDate>
				<author><![CDATA[ Mark_Ameba]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=sergiotaborda]<br /> Sim, no C++ onde ha substuição sim (é gerado um novo codigo com E subtituido) <br /> Eu estava falando em java em que não ha substituição/geração de codigo.<br /> [/quote]<br /> <br /> O fato de não haver substituição no resultado final não implica em dizer que o compilador não faça, ou não saiba como ficaria a classe durante a compilação. Aliás, ele sabe muito bem, tanto que valida os seus sets. O compilador gera bastante código também, em especial, faz os casts automaticamente. Os casts aparecem num bytecode descompilado, por exemplo.<br /> <br /> [quote=sergiotaborda] Pior, a classe pode ser abstrata e o uso de interface poderia ser feito noutra classe que nem sequer está no projeto. E aí ? [/quote]<br /> <br /> Você diz a classe que será substituída em T? Nesse caso, não poderia haver new, concorda? Como dar new numa classe abstrata?<br /> <br /> Se ela só "vem de fora", não haverá new T(). E daí o código compila.<br /> <br /> Mas vc tem razão. Com type erasure, é impossível implementar new T. ]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468982.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468982.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 18:35:53]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
			<item>
				<title>Generics - Não consigo instanciar o tipo.</title>
				<description><![CDATA[ [quote=Mark_Ameba]Cara, pode citar um exemplo?<br /> Algo que passe dos nossos sonhos o.0<br /> Por acaso ele não pensa sózinho, pensa? ^^[/quote]<br /> <br /> Não, ainda não pensa sozinho. Mas que tal [url="http://codecutter.org/tools/koolplot/"]essa biblioteca gráfica[/url] matemática que deixa vc construir gráficos assim:<br /> [code]<br /> Plotdata x(-3.0, 3.0), y = sin(x) - 0.5*x;<br /> plot(x, y);<br /> [/code]<br /> Essa notação é mais próxima da matemática, concorda? <br /> <br /> Essa ainda foi fácil. Ou que tal uma função que transforme um número binário em decimal em tempo de compilação?<br /> [code]int x = binary&lt;1101011&gt;;[/code]<br /> <br /> Existem APIs para processamento de XML, como a rapidxml, que usa a meta-programação para atingir uma performance absurda.<br /> <br /> Na minha API, tenho classes que lidam com vetores matemáticos. Elas aceitam qualquer coisa que tenha o operador [] sobrecarregado para oferecer 3 índices, com esses 3 valores. Isso inclui, arrays primitivos e outras classes. Isso garante que haja integração com outras APIs, com alto grau de segurança, sem a necessidade de casts e sem a necessidade de eu conhecer essas APIs ou declarar uma interface.<br /> <br /> <br /> <br /> Na verdade, não passam pelos sonhos dos programadores java não pq eles seriam menos capazes. Por favor, eu não quis ser pejorativo. <br /> Mas sim, pq a linguagem simplesmente não dá mecanismos para que essas coisas sejam sequer possíveis. <br /> <br /> Então, os sonhos deles se concentram em outros lugares. :)<br /> Aliás, a reflexão também faz coisas que não passa pela cabeça dos programadores C++ também. ;) <br /> No mundo C++ existe o RTTI, que é limitadíssimo e muito lento.]]></description>
				<guid isPermaLink="true">http://www.guj.com.br/posts/preList/87532/468983.java</guid>
				<link>http://www.guj.com.br/posts/preList/87532/468983.java</link>
				<pubDate><![CDATA[Fri, 11 Apr 2008 18:44:16]]> GMT</pubDate>
				<author><![CDATA[ ViniGodoy]]></author>
			</item>
	</channel>
</rss>