Duvida reflection

public void teste(String newClass) {

    Class c = Class.forName(newClass);  
}

minha duvida é… tem como fazer um casting dinamico da mesma forma que eu posso instanciar uma classe dinamicamente?

obrigado.

Não entendi muito bem a sua dúvida, mas como ninguém respondeu ainda; será que é isso que você quer?

try {
   Class c = Class.forName("my.package.SomeClass");
   SomeClass c = (SomeClass)c.newInstance();
}
catch (ClassCastException cce) { ... }
catch (InstantiationException ie) { ... }
catch (Throwable t) { ... }

Não entendi a parte “casting dinâmico”. Se vc estiver querendo dizer se a sua classe implementa uma determinada interface ou estende determinada classe vc pode usar o operador instanceof:

try {
   Class c = Class.forName("my.package.SomeClass");
   Object obj = c.newInstance();

   if (obj instanceof SomeClass) { ... }
   else if (obj instanceof OtherClass { ... }
}
catch (ClassCastException cce) { ... }
catch (InstantiationException ie) { ... }
catch (Throwable t) { ... }

[quote] …
SomeClass c = (SomeClass)c.newInstance();


[/quote]

o que voce acabou de fazer? um casting… mas no meu caso esse “my.package.SomeClass” eh passado em tempo de executacao… tanto pode vir SomeClass como pode vir ArriEguaClass… e dae? como fica meu casting? se minha SomeClass e ArriEguaClass nao sao do mesmo tipo… nao estedem a mesma classe nem implementa nenhuma classe em comum…? como fica meu casting?? quero meu casting bem generico assim como foi para instanciar um objeto com c.newInstance();

é possivel?

Mas você não sabe o tipo da referência, qual o problema em usar ele? Não entendi esse problema de nenhuma classe em comum.

Pra retirar esse cast daí, você poderia fazer isso:

SomeClass = Class.forName("bla.bla.bla.SomeClass").asSubclass(SomeClass.class).newInstance();

Acho que isso deve funcionar :smiley:

[quote=carlosraphael][code]
public void teste(String newClass) {

Class c = Class.forName(newClass);  

}
[/code]

minha duvida é… tem como fazer um casting dinamico da mesma forma que eu posso instanciar uma classe dinamicamente?

obrigado.[/quote]

Você pode usar Genérics:

public class teste<T> {
	@SuppressWarnings("unchecked")
	public T newClass(String newClass) throws Exception {
	     return (T) Class.forName(newClass);  
	 }
}