Reflection X Tiger

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

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.

Valew Thiago!

funfou legal!!!

:wink:

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?

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

:wink:

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…