2012-04-01 7 views
1

Dies ist ein Code-Snippet, das ich in einem Open-Source-Java-Template-Projekt gefunden habe.Ist das eine geniale Sache oder einfach nur schlechter Code?

Hat jemand eine Ahnung, wofür dieses Konstrukt gut sein kann?

final public Expression Expression() throws ParseException { 
    Expression exp; 
    exp = OrExpression(); 
     {if (true) return exp;} 
    throw new Error("Missing return statement in function"); 
    } 
+4

Ziemlich umgefallene Möglichkeit, orExpression() zurückzugeben; ' – assylias

+0

ist' throw new Error() 'nicht erreichbar? –

+0

@assylias: Genau das denke ich auch. Ich frage mich nur, warum zum Teufel der Programmierer seinen Code auf diese Weise schreibt? – uthomas

Antwort

3

Dies ist schlampig Code. Der tatsächliche Effekt ist einfach return OrExpression();.

Es gibt eine Ausrede, die ich für Code wie folgt akzeptiere: Es gibt viele andere Methoden wie es, die einem ähnlichen Muster folgen, aber komplexer sind, so dass die nutzlosen Bits hier nicht nutzlos sind. Dies ist jedoch ein extremes Beispiel.

Jedoch gibt es fast keine Entschuldigung für die throw new Error("Missing return statement in function");. Der Java-Compiler verweigern kompilieren eine Methode, deren Rückgabetyp nicht void ist und die einen Code-Pfad hat, der das Ende erreicht (nicht return, throw, oder geben Sie eine Endlosschleife). Der einzige Grund, dies wäre eine gute Idee, wenn die Absicht war, unvollständigen Code zu kompilieren - dh zur Laufzeit statt zur Kompilierzeit fehlschlagen, so dass andere Teile des Codes verwendet oder getestet werden können - aber selbst dann anwenden zu allen Methoden ist eine schlechte Idee.

1

Dies ist ein automatisch generierter Code von JavaCC.

+0

Hmm, das macht Sinn. – uthomas

Verwandte Themen