Dúvida sobre Exception e polimorfismo

3 respostas
F

Pessoal ,

Uma classe SQLException não é “filha” de Exception ?

Estou tentando fazer o seguinte:

Tenho uma classe baseada em Exception para pegar excessões, com o seguinte construtor,
em uma camada DAO, assim:

public class DAOException extends Exception {

	void DAOException( Exception e) throws Exception
	{
		throw new Exception(e);
	}

}

no meu codigo DAO, onde uso sql eu faço assim no bloco catch:

} catch (SQLException e) {
			throw new DAOException(e) ;

mas o eclipse diz que esta errado.

Se SQLException é “filha” de exception , o construtor que tenho na classe DAOException não deveria aceitar
a excessão SQLException como parâmetro , por polimorfismo ?

Agradeço qualquer ajuda.
Abs
Fábio

3 Respostas

peczenyj

para declarar o construtor da classe vc precisa fazer

class MinhaClasse ...{ public MinhaClasse(parametros){ } }

void AlgumaCoisa é definição de tipo de retorno sobre um método.

Agora tem algo que não faz sentido ai: o seu construtor, até então, simplesmente lança (throw) uma nova exception contendo a exception recebida. E vc lança DAOException no seu catch(), ta lançando duas vezes ??

Ao meu ver, não esta claro para vc a necessidade dessa Exception.

Olhe a documentação:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/SQLException.html
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Exception.html

Percebeu que tipo de coisa SQLException faz de diferente? Primeiro identifica o que vc quer fazer, acho que vc só quer renomear as suas Exceptions então bastaria vc sobreescrever o construtor Exception(Throwable cause) e chamar super(cause); alem de fazer alguma coisa - log por exemplo.

F

peczenyj , obg pela resposta

Realmente tinha esse erro bobo ai do public no construtor, mas continua não dando certo.

O que eu quero fazer na verdade é “transferir” a responsabilidade pelo tratamento do erro para uma “camada” acima da camada DAO, que não deve conhecer “SQLException”.

Esse projeto é um trabalho de curso e o professor solicitou que o mesmo seja feito sob “camadas” diferentes , diminuindo assim o “acoplamento” entre as classes envolvidas.

peczenyj

Veja se isso satisfaz por enquanto

class PessoaDAO{ void salvar(Pessoa p) throws DAOException{ try { ... }catch(SQLException e){ throw new DAOException("Erro ao salvar",e); } } } class DAOException extends Exception { public DAOException(String message,Throwable cause){ System.out.println(1024); super(message,cause); } }

Criado 11 de outubro de 2009
Ultima resposta 11 de out. de 2009
Respostas 3
Participantes 2