missing return statement

Roovy

Aktives Mitglied
Ich habe eine Funktion geschrieben, die einen String aus einer xml-Datei lesen soll und diese dann an den Auftraggeber (in anderer Klasse) weitergeben soll.
Code:
public static Element e;
    public static Element VERSION() {
        try {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document doc = builder.parse(new File("config.xml"));
           
            NodeList nList = doc.getElementsByTagName("version");
            Node version = nList.item(1);
            Element e = (Element) version;
           
            return e;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }
    }
Es zeigt mir an, dass ein Return statement fehlt, was ich aber habe. Leider muss es in dem Try-Catch sein, da es sonst nicht weißt woher es die Node 'version' beziehen soll, da diese scheinbar nur innerhalb des T-C zugreifbar ist.
Bewege ich diese auch aus dem T-C heraus (streng genommen benötigen ja nur die ersten beiden Zeilen Try-Catch) fehlt wiederrum NodeList 'nList'.

Was mache ich falsch?
 
Es muss für jeden möglichen Ausführungspfad ein return geben, in deinem Fall gibt es, wenn eine Exception gefangen wird, kein return.

Eine Möglichkeit wäre, die Exceptions einfach weiterzuschmeißen, dann kannst du auch sinnvoll drauf reagieren.
Andere Möglichkeit, am Ende einen Default-Wert zu returnen.
 
Wenn das try fehlschlägt returnt die Methode nichts.
Entweder musst du was in den catches returnen oder am Ende der Methode.

Edit: oh, zu spät x)
 
Wie schmeiße ich die Exceptions denn weiter?
Wenn ich ja return(e) mit in die catches packe, weiß er wieder nichts, da hier die Variable ja keinen Inhalt hat!
 
In der Methodendeklaration (halt Exception durch deine ersetzten 😉):
Java:
 public static int test() throws Exception{
    //code
}
 
In der Methodendeklaration (halt Exception durch deine ersetzten 😉):
Java:
 public static int test() throws Exception{
    //code
}

sollte man allerdings nicht so schreiben, sonst muss man beim Aufruf Exception fangen, und fängt damit alles, auch das, was man nicht fangen will 😉 Entweder alle einzeln, oder eine andere Exception, die die unterschiedlichen kapselt (und nicht Exception ist)
 
sollte man allerdings nicht so schreiben, sonst muss man beim Aufruf Exception fangen, und fängt damit alles, auch das, was man nicht fangen will 😉 Entweder alle einzeln, oder eine andere Exception, die die unterschiedlichen kapselt (und nicht Exception ist)
Und wie würde das dann ausshen?!
 
Zuletzt bearbeitet:
Zum Unterschied: beim try-catch behandelst du direkt etwaige Exceptions, bei throws... machst du dem Caller deiner Funktion durch die Signatur klar, dass es in deiner Methode zu Exceptions kommen kann und diese behandelt werden sollen. Der Unterschied ist also wo die Exception behandelt wird.
 

Zurück
Oben