Avatar billede jespersahner Nybegynder
27. august 2005 - 15:29 Der 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.

Hvordan løser jeg dette?
Avatar billede arne_v Ekspert
27. august 2005 - 15:35 #1
} catch (Exception ex) {
  ex.printStackTrace();
}

eller

} catch (Exception ex) {
  ex.printStackTrace(minprintstream);
}

eller

} catch (Exception ex) {
  ex.printStackTrace(minprintwriter);
}

vil jeg tro
Avatar billede jespersahner Nybegynder
27. august 2005 - 15:42 #2
->arne_v: JÆS, det er jo ganske vist!
Avatar billede jespersahner Nybegynder
27. august 2005 - 15:42 #3
->arne_v: Smid lige et svar.
Avatar billede arne_v Ekspert
27. august 2005 - 15:44 #4
svar
Avatar billede simonvalter Praktikant
27. august 2005 - 18:06 #5
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
Avatar billede jakoba Nybegynder
28. august 2005 - 03:58 #6
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
Avatar billede arne_v Ekspert
28. august 2005 - 10:05 #7
jakob jeg tror at du har været lidt uheldig med eksmeplet

retur typen skal være den samme

parametrene skal være de samme

der skal throwes de samme exceptiosn ELLER FÆRRE

man må altså ikke smide flere exceptions men godt færre
Avatar billede simonvalter Praktikant
28. august 2005 - 10:19 #8
og fra Java SE 5 kan exceptions være af en subklasse af den orginale exception
Avatar billede simonvalter Praktikant
28. august 2005 - 10:28 #9
hmm det samme gælder for retur type.. så en  public Object clone() kan f.eks overrides med alle returtyper.
Avatar billede jakoba Nybegynder
28. august 2005 - 12:42 #10
Ja det var da noget vås så. Undskyld.
Avatar billede arne_v Ekspert
28. august 2005 - 14:01 #11
simon>

har det ikke altid været sådan med exceptions ?

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
Avatar billede simonvalter Praktikant
28. august 2005 - 15:09 #12
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 ;)
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