2012-04-01 2 views
1

Это фрагмент кода, который я нашел в проекте Java-шаблонов с открытым исходным кодом.Это какая-то гениальная вещь или простой просто плохой код?

Кто-нибудь знает, для чего может быть эта конструкция?

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

Довольно обходным способом для возврата OrExpression(); ' – assylias

+0

' 'throw new Error()' недостижим? –

+0

@assylias: именно это я тоже думаю. Мне просто интересно, почему, черт возьми, программист пишет свой код таким образом? – uthomas

ответ

3

Это неряшливый код. Фактическим эффектом является просто return OrExpression();.

Есть одно оправдание, которое я принимаю для кода следующим образом: Есть много других подобных ему методов, которые следуют аналогичной схеме, но более сложны, так что бесполезные биты здесь не бесполезны. Однако это немного экстремальный пример.

Однако, почти нет оправданий для throw new Error("Missing return statement in function");. Компилятор Java будет отказаться от компиляции метода возврата, который не является void и который имеет путь к коду, который достигает конца (не return, throw, или введите бесконечный цикл). Единственная причина, по которой это было бы хорошей идеей, заключалось в том, что если целью было , то разрешить неполный код для компиляции - т.е. не работать во время выполнения, а не компилировать время, чтобы другие части кода могли быть использованы или протестированы - но даже после его применения для всех методов это плохая идея.

1

Это автоматически сгенерированный код JavaCC.

+0

Хм, это имеет смысл. – uthomas

 Смежные вопросы

  • Нет связанных вопросов^_^