Это гениальная вещь или просто плохой код? - PullRequest
1 голос
/ 01 апреля 2012

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

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

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

Ответы [ 2 ]

3 голосов
/ 01 апреля 2012

Это небрежный код.Фактический эффект просто return OrExpression();.

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

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

1 голос
/ 06 июля 2013

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

...