"Flare" <nomail@sorry.dk> writes:
> da constructoren derfor tvinges til at have en throws SQLException får jeg
> problemer.!
>
> Når jeg nedarver fra klassen DAL har jeg brug for at kalde
> super(par,par,par) på den.
>
> Men hov hov. Jeg ska huske at pakke super ind i try / catch....ok....Men nix
> super skal være den første erklæring i min constructor....huh.....
Ja, der er ingen smart måde at undgå at din subklasses constructor
også smide exceptionen.
Det du kan gøre, er at lade være med at bruge konstruktoren offentligt,
og lave en factory-metode med passende try/catch.:
class Sub extends DAL {
private Sub(Par par) throws SQLException {
super(par,par,par);
// yadda
}
public Sub createSub(par) {
try {
return new Sub(par);
} catch (SQLException e) {
return null; // eller hvad du nu vil med fejlen
}
}
}
> Jeg kender godt begge regler. Men det kan sgu da ikke passe man ikke kan
> lave denne implementering! Det er faktisk en port fra noget C# kode.
Hvis din constructor smider en exception, så kan du ikke forvente at
objektet giver mening bagefter. Det er jo ikke blevet færdig-
konstrueret. Jeg synes ikke det giver mening at fange exceptionen
andre steder end der hvor den først bliver smidt. Hvis supers constructor
ikke selv kan håndtere fejlen, så er det for sent.
> Nogen ide til hvordan man briger exception handling i forbindelse med
> contructorer og nedarvning? For jeg er blank.
Fang fejlen med det samme, hvis du kan recover'e fra den. Ellers bliver
objektet ikke til noget. Det giver strålende mening for mig :)
Ellers brug factory-metoden til at gøre noget alternativt hvis objektet
ikke bliver skabt. Det kan en konstruktor ikke.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'