17. maj 2009 - 19:09Der 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 ?
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..
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
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.
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.