Poderia ser mais especifico, colocando o código que está com problema?
nel
Boa tarde.
Estas duas linhas dizem tudo:
java.lang.ClassCastException: persistencia.classes.MySQLDAOFactory cannot be cast to persistencia.interfaces.DAOPrograma
at persistencia.classes.MySQLDAOFactory.getDAOPrograma(MySQLDAOFactory.java:31)
A primeira indica que você está tentando atribuir um tipo incompatível a um determinado objeto. Seria como dizer que o seu Objeto Pessoa recebe um Objeto Veículo. A segunda linha mostra exatamente qual linha está ocorrendo o seu erro.
Se mesmo assim não conseguir identificar o que está ocorrendo, poste a classe. Não esqueça de utilizar as tags code.
Abraços.
packagepersistencia.classes;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;importpersistencia.interfaces.DAOPrograma;publicclassMySQLDAOFactoryextendsDAOFactory{privatestaticjava.sql.Connectioncon=null;publicstaticConnectioncreateConnection()throwsException{if(con==null){try{//Class.forName("org.gjt.mm.mysql.Driver");//Declaração do driverClass.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/programas","root","vertrigo");}catch(ClassNotFoundExceptione){System.out.println("Classe n encontrada");}catch(SQLExceptione){System.out.println("SQL exception");}}returncon;}publicDAOProgramagetDAOPrograma()throwsException{return(DAOPrograma)newMySQLDAOFactory();}}
Y
Yky_Mattshawn
Isso aí compila?
Porque tu definiste uma INTERFACE DAOPrograma e está mandando uma CLASSE extender essa interface. Até onde lembro, apenas interfaces podem extender interfaces. Uma classe deve implementar uma interface.
Desculpem se estou falando alguma besteira, hehe.
Alchemist
O nel disse tudo… ta tentando passar elefante onde deveria ser um rato… e está parada de interface ai tb ta estranha viu :s
S
Shatemui
Não, n te culpo n, estou com essa dúvida, pq faltei uma aula da facu e peguei de um cara q foi, eu fiz baseado no que ele fez, detalhe, o dele tb n funcionava.
Y
Yky_Mattshawn
Ok. Primeiramente troque a nona linha do MySQLDAOFactory, ficando assim:
publicclassMySQLDAOFactoryimplementsDAOFactory{
E vamos ver no que dá. Posta, então, o resultado da compilação.
nel
Seu erro:
public DAOPrograma getDAOPrograma() throws Exception{
//ele não aceita este tipo de Cast
return (DAOPrograma) new MySQLDAOFactory();
}
E sim, as classes devem implementar uma Interface e não extender de uma interface. Compilar acredito que compila pois uma interface nada mais é que uma classe abstrata. Amigo, mude isso ok? Está bem estranho seu código.
cdorner
Yky Mattshawn:
Isso aí compila?
Porque tu definiste uma INTERFACE DAOPrograma e está mandando uma CLASSE extender essa interface. Até onde lembro, apenas interfaces podem extender interfaces. Uma classe deve implementar uma interface.
Desculpem se estou falando alguma besteira, hehe.
A classe que ele esta dando extends e na DAOFactory e não na DAOPrograma, por isso compila sim,
para resolver o seu problema:
crie uma implementacao para DAOPrograma, ex DAOProgramaImpl
veja que o que vc quer retornar é uma implementação para DAOPrograma e não uma Factory, como estava fazendo.
S
Shatemui
Yky Mattshawn:
Ok. Primeiramente troque a nona linha do MySQLDAOFactory, ficando assim:
publicclassMySQLDAOFactoryimplementsDAOFactory{
E vamos ver no que dá. Posta, então, o resultado da compilação.
quando coloquei apareceu o erro:
the type DAOFactory cannot be a superinterface of MySQLDAO, a superinterface musta be a interface
S
Shatemui
cdorner:
Yky Mattshawn:
Isso aí compila?
Porque tu definiste uma INTERFACE DAOPrograma e está mandando uma CLASSE extender essa interface. Até onde lembro, apenas interfaces podem extender interfaces. Uma classe deve implementar uma interface.
Desculpem se estou falando alguma besteira, hehe.
A classe que ele esta dando extends e na DAOFactory e não na DAOPrograma, por isso compila sim,
para resolver o seu problema:
crie uma implementacao para DAOPrograma, ex DAOProgramaImpl
veja que o que vc quer retornar é uma implementação para DAOPrograma e não uma Factory, como estava fazendo.
Não tem como colocar um exemplo desse código, como disse antes estou apredendo DAO e peguei com base no código de outra pessoa.
cdorner
ta ai uma brincadeira,
esta tudo em um .java so por isso existem classes declaradas como static, leia com calma que vc entende
mas deve funcionar hehe
packagebr.com.examples.design;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassGUJ{publicinterfaceDAOPrograma{publicvoidincluir(Programaprograma)throwsException;}publicstaticclassDAOProgramaImplimplementsDAOPrograma{publicvoidincluir(Programaprograma)throwsException{// SEU CODIGO INCLUIR}}publicstaticclassPrograma{// wharever}abstractclassDAOFactory{publicabstractConnectioncreateConnection()throwsException;}publicstaticclassMySQLDAOFactory{privatestaticConnectioncon=null;publicConnectioncreateConnection()throwsException{if(con==null){try{// Class.forName("org.gjt.mm.mysql.Driver");//Declaração do// driverClass.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/programas","root","vertrigo");}catch(ClassNotFoundExceptione){System.out.println("Classe n encontrada");}catch(SQLExceptione){System.out.println("SQL exception");}}// se der qualquer exception acima vai retornar con nulo, // é isso mesmo que vc quer? não é melhor dar um throws na exception pra tratar de outra forma pelo client?returncon;}publicDAOProgramagetDAOPrograma()throwsException{returnnewDAOProgramaImpl();}}}
S
Shatemui
Valeu, agora estou indo para faculdade, assim que chegar eu vou tentar isso e os exceptions só coloquei para ver se mostra algum coisa mesmo, n estavam no código original.
S
Shatemui
Eu fiz as alterações mas n está funcionando ainda, tem como eu colocar os arquivos da fonte inteira aqui no fórum?
cdorner
qual a exception?
S
Shatemui
Pessoal foi um erro de sintaxe de query, foi um maldito apóstrofe a mais, foi mal ae pessoal, quem quiser eu passo o código pronto, mas como estou iniciando em DAO, só inclui mas ja´alguma coisa para quem quer aprender.