27. august 2005 - 15:29Der er
11 kommentarer og 1 løsning
Nedarvet metode uden "throws Exception"
Jeg er lidt på gyngende grund her mht. min Java-kunnen.
Jeg arver fra en klasse indeholdende en metode uden "throws Exception". Når jeg overskriver metoden i min nedarvede klasse, laver jeg derfor try-catch, idet jeg ikke må kaste min undtagelse men skal fange den.
Men mit program fejler, og da jeg fanger undtagelsen, får jeg bare resultatet fra catch-delen i mit output-window uden mulighed for at se, hvor det er gået galt.
Hvis ikke jeg havde lavet try-catch, ville metoden fejle, og jeg ville få en fejl-log retur i output-window med linienumre osv.
Jeg kan heller ikke lave "throw ..." inde i min catch-del, idet compiler'en kræver, at metoden så indeholder "throws", men det kan den på den anden side ikke, da metoden arves uden.
Du kan altid smide den videre som en unchecked exception. Det er selvfølgelig ikke noget du skal gøre bare fordi du kan men det er ihvertfald muligt. Der er lidt om det her, men der er mange forskellige meninger om checked vs unchecked exceptions. http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html
når du nedarver en metode skal den nye version af metoden have samme signatur som den di erstatter/udvider.
metodens returtype skal være den samme. parametrene skal være de samme, og endelig: hvis der kastes en exception skal den ny metode kaste den samme exception.
Men du kan lave en metode med et ANDET navn der har hvad pokker ændringer du vil.
exempel:
// dette går galt: // ændret returtype, ingen 'throws CloneNotSupportedException' public MinKlasse clone() { try { MinKlasse temp = (MinKlasse)super.clone(); //... // hvad du nu ønsker at udvide clone med return temp. } catch( CloneNotSupportedException e ) { e.printStackTrace(); } return NULL; }
// Dette er OK: public Object clone() throws CloneNotSupportedException { MinKlasse temp = (MinKlasse)super.clone(); //... // hvad du nu ønsker at udvide clone med return temp. } public MinKlasse minClone() { //NB metoden har et andet navn try { return (MinKlasse)this.clone(); kalder metoden ovenover. } catch( CloneNotSupportedException e ) { e.printStackTrace(); } return NULL; }
og når du ønsker at bruge den skal du så kalde 'minClone' metoden. ikke 'clone' metoden
retur typen er ny i 1.5 - og er formentlig indført af hensyn til generics - og er efter min mening et godt eksempel på at Java efter min mening er på vej ud på en farlig vej
Jo du har ret det er ikke nyt for exceptions. Læste en note for nogen punkter om overriding og fik blandet det sammen. Indtil videre er det eneste jeg rigtigt har brugt af 1.5 er enhanced for loop ;)
Synes godt om
Ny brugerNybegynder
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.