Avatar billede gg Praktikant
17. maj 2009 - 19:09 Der er 5 kommentarer og
1 løsning

Egne Exceptions klasser, hvorfor

Hejsa

Hvorfor er det lige man egentlig laver sine egne klasser

Jeg har f.eks følgende interface: ( der så bliver implementeret af en klasse )


public interface CatalogDAO {
    public Category getCategory(String categoryID, Locale l)
        throws CatalogDAOSysException;
}

public class CatalogDAOSysException extends RuntimeException {
    public CatalogDAOSysException (String str) {
        super(str);
    }

    public CatalogDAOSysException () {
        super();
    }
}

Hvorfor laver man egentlig sin egen excerption Klasse (CatalogDAOSysException) og kaster en throws CatalogDAOSysException. Jeg kan vel bare lave en try catch med almindlig Exception uden at kald min egen definerede klasse ?
Avatar billede arne_v Ekspert
17. maj 2009 - 19:18 #1
Man bør kun catche Exception på det aller yderste niveau. Nogle exceptions er det ikke rigtigt muligt at gøre noget ved.

Ved at kode imod et interface hvor metoderne smider en interface specifik exception og lade implementationerne catche deres specifikke exceptions og smide den interface specifikke exception, så encapsulater du også dine exceptions.

Et godt eksepel er JDBC. JDBC interface definerer metoder som smider SqlException exceptions (og sub klasser i nyere Java versioner). Det gør det muligt at håndtere exceptions uafhængigt af databasen. Man håndterer SqlException fremfor MySQLException, OracleException, PostgreSQLException etc..
Avatar billede arne_v Ekspert
17. maj 2009 - 19:19 #2
throws CatalogDAOSysException og extends RuntimeException er vel iøvrigt lidt inkonsistente.
Avatar billede gg Praktikant
17. maj 2009 - 19:30 #3
arne>> Så ideen er altså at få en mere specifik exception (ved den interface specifikke) for derved at indkapsle/indsnævre exceptions.

Med hensyn til jdbc exception. Hvis jeg har forstået det ret så benyttes den generelle SQLException fremfor den blandt andet specifikke OracleException. Men øhh hvad har det af gøre med at jeg Selv laver en mere specifik Exception.

Med hensyn til inkonsistent så er eksemplet taget fra sun.com. Og jeg kan ikke lige forstå hvorfor det skulle være inkonsistent.

Håber ikke det er for mange spørgsmål jeg har smidt
Avatar billede arne_v Ekspert
17. maj 2009 - 19:43 #4
Jeg tror at vi har fået blandet to ting sammen.

1)  Dit interface bør erklære en generel exception og de implementerende klaser bør catche deres specifikke exceptions og throwe den generelle for at encapsulate implementationen. Som jeg beskrev ovenfor.

2)  Den generelle exception bør være en du selv laver fremfor en endnu mere generel som f.eks. Exception for at give kalder mulighed for kun at catche den.
Avatar billede arne_v Ekspert
17. maj 2009 - 19:45 #5
Exceptions der arver fra RuntimeException er unchecked og behøver derfor ikke erklæres.

Medmindre du har meget styr på exceptions, så vil jeg anbefale dig at bruge checked exceptions d.v.s. extende Exception ikke RuntimeException.
Avatar billede arne_v Ekspert
04. juli 2009 - 03:28 #6
all set ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester