/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Problem med exception handling og nedarvni~
Fra : Flare


Dato : 16-03-04 17:37

Hejsa.

Jeg er ved at lave en DataAccessLayer men det er sådan set sagen
udvedkmmende.

I min basisklasse DAL har jeg i constructoren brug for at fange en exception
og hvis jeg gør dette smide en ny afsted.

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.....

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.

Nogen ide til hvordan man briger exception handling i forbindelse med
contructorer og nedarvning? For jeg er blank.

mvh
Anders



 
 
Thomas Bendsen (16-03-2004)
Kommentar
Fra : Thomas Bendsen


Dato : 16-03-04 18:49

In article <40572d47$0$456$edfadb0f@dread14.news.tele.dk>,
"Flare" <nomail@sorry.dk> wrote:

> Hejsa.
>
> Jeg er ved at lave en DataAccessLayer men det er sådan set sagen
> udvedkmmende.
>
> I min basisklasse DAL har jeg i constructoren brug for at fange en exception
> og hvis jeg gør dette smide en ny afsted.
>
> 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.....
>
> 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.
>
> Nogen ide til hvordan man briger exception handling i forbindelse med
> contructorer og nedarvning? For jeg er blank.
>
> mvh
> Anders
>
>

Kan du ikke bare lade constructoren i den klasse som nedarver fra DAL
smide en SQLException.
Altså:

public class MyClass extends DAL {
public MyClass() throws SQLException {
super(par,par,par);
}
}

Det giver i hvert fald ingen problemer for min compiler.

MVH Thomas Bendsen

Flare (17-03-2004)
Kommentar
Fra : Flare


Dato : 17-03-04 00:20

> Kan du ikke bare lade constructoren i den klasse som nedarver fra DAL
> smide en SQLException.
> Altså:
> public class MyClass extends DAL {
> public MyClass() throws SQLException {
> super(par,par,par);
> }
> }

Jo det kan jeg da. Og det er pefekt og lige hvad jeg ville have. Ved ikke
hvorfor jeg ikke så den "mulighed". Men ok nu er det også max 500 liners
java kode jeg har skrevet ialt indtil videre så jeg kommer nok efer det.
Takker!

Mvh
Anders



Lasse Reichstein Nie~ (16-03-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 16-03-04 20:22

"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.'

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409081
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste