Reflection X Tiger

5 respostas
rvaldomiro

Amigos, estou instanciando algumas classes por reflexão no Tiger e ele dá um warning no seguinte trecho:

Class c = Class.forName("br.com.teste.MinhaClasse"); desktopPane.add((Component) c.newInstance());

o Warn é este:

Type safety: The method newInstance() belongs to the raw type Class. References to generic type Class<T> should be parameterized

Já tentei de várias formas e não consegui contornar este caso. Alguém pode dar uma maõzinha?

PS. o código acima está funcionando normalmente sem exceptions!

[]´s

5 Respostas

T

Tem dois jeitos de tirar o seu warning.

Um deles é escrever:

Class< ? > c = Class.forName( ... o resto é igual

O outro é mais complicado. Se você sabe que a tal MinhaClasse tem de ser sempre um Component, você pode usar:

Class<? extends Component > c = Class.forName("br.com.teste.MinhaClasse").asSubclass(Component.class);
desktopPane.add (c.newInstance());

Você viu que adicionei uma chamada a “asSubclass” para retornar um Class que deve se referir a alguma classe que é derivada de Component.
Além disso, você viu que agora não preciso usar o cast para c.newInstance.

Veja o que é melhor para você.

P.S. Se eu não estivesse com o JDK 5.0 disponível nem me animava a responder. Tive de fazer um programa-teste só para ver o que compilava OK.

rvaldomiro

Valew Thiago!

funfou legal!!!

:wink:

T

Acho que vou pedir para mudarem o meu nick, já é a 10a. vez que me chamam de Tiago …

Qual você usou? A mais simples (Class <?>) ou a mais complicada?

rvaldomiro

A 2ª opção, pois conheço quais são as subclasses :lol:

:wink:

T

Legal, na verdade essa nova declaração da classe Class foi pensada para que o “newInstance” e outros métodos não necessitassem mais de casts. Não sei se eles não deveriam ter posto um exemplo no javadoc…

Criado 24 de maio de 2005
Ultima resposta 27 de mai. de 2005
Respostas 5
Participantes 2