ClassCastException

Pessoal, já estou algumas horas com um problema que é o seguinte. Tenho algumas interfaces e classes que as implementam.

[code]public interface X { … }

public class ClasseXY implements X { … }

public class ClasseYX implements X { … }

public class ClasseXX implements X { … }

public class ClasseYY implements X { … }[/code]

Determinado momento eu tenho que decidir qual classe usar e estou fazendo (a grosso modo) mais ou menos assim:

[code]public X obterClasse(int i) {
String nomeClasse = "XY";
if (i == 1) nomeClasse = "YX";
else if (i == 2) nomeClasse = "XX";
else nomeClasse = "YY";

  try {
        Class cls = Class.forName("Classe" + nomeClasse);
        return (X)cls;  // **** ClassCastException ocorre aqui...
  }
  catch (...) { ... }

  // resto do metodo ...

}[/code]

Por que eu não consigo fazer o up-casting?? Alguém poderia me dar uma idéia?

dango seu return deve ser desta forma:

    return (X)cls.newInstance();

Assim vc cria uma instancia da classe desejada.

Dango, soh pra saber… pq vc nao retorna um new XY, XX, YX ou YY? Pra que fazer a coisa com reflection, nesse caso? Me parece que vc ta soh passando um batom no new() :smiley:

Hummm… marcação + cansaço + pressa de ver funfando = caca! :roll:

É que o exemplo parece simples de tratar com new. Mas no futuro pode não ficar… estou fazendo uma interpretação totalmente pessoal do MVC para um site que estou desenvolvendo. É a minha primeira aventura com um site em JSP/Servlets.

Como não é para um cliente mas para a própria empresa, estamos tentando usar tudo o que nos parece que usaremos. Não estamos usando nem Struts nem nada. Estamos apenas usando o J2EE blue prints para os DAO e Facade (prevendo um moving para Hibernate no próximo ano).

Não usamos new pq a quantidade de classes suportadas pode crescer significativamente. Assim não queremos um amontado de ifs.

Brigadão pela ajuda, pessoal.

Cara, toma muito, mas muito cuidado com isso. Eu ja tou ateh vendo o tamanho do Frankenstein :shock:

Pq nao usar um framework, ja testado, ja disponivel, ja funcionando, como Struts, WebWork, Shocks, Spring…?

hmmm… como é mesmo aquela palavra? “inabilidade” ? err… :oops:

Na verdade todos os sites que desenvolvo são em ASP.
Mas estamos abandonando essa tecnologia. Estou estudando servlets ainda. Estou me familiarizando com o Tomcat e as especificações. Então estou querendo fazer tudo na mão baseado no que estamos aprendendo.

Como estamos aplicando todos os “bons princípios” de desenvolvimento, não vai ficar um “frankenstein” tão grande assim… vai ficar um “frankensteinzinho”… hehehe! domável! A aplicação é pequena. 5 objetos DAO. As implementações concretas são em MySQL e SQL Server 2000.

Será utilizado em campo mas é bem experimental. É aquela aplicação que você desenvolve pra “saber se vai dar pra rachar” quando for “usar mesmo”. (não se a tecnologia vai dar, mas a equipe, hehe!).

Valeu, cv!