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.
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
[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);
}
}