Одиночная инструкция возврата в методе, но объект не может быть создан.Ошибка возврата - PullRequest
0 голосов
/ 02 мая 2019

Мы узнали, что хорошей практикой написания кода на Java является использование только одного оператора return в методе. Однако, вот моя проблема;

У меня есть абстрактный суперкласс, Action. Есть подклассы, такие как WalkAction, JumpAction, DoNothingAction и т. Д. В классе Actor есть метод, который возвращает действие, основанное на требованиях цикла if-else if-else. Как я должен иметь только 1 оператор возврата, если класс Action не может быть создан. Прямо сейчас метод выглядит примерно так:

private Action getAction(Actor actor, Distance distance) {
   if (distance < 5) {
       return new JumpAction(actor);
   }
   else if (distance > 5 && distance < 10) {
       return new WalkAction(actor);
   }
   else {
       return new DoNothingAction(actor);
   }
}

Это также показывает ошибку, что нет оператора возврата

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Добавить «return null» из блока «if-else».Компилятор не знает ваших данных времени выполнения, возможно, что весь блок if-else вообще не совпадает, тогда вы получите ошибку «no return Statement».

0 голосов
/ 02 мая 2019

Вы можете переписать свой код в следующую единственную return форму:

private Action getAction(Actor actor, Distance distance) {
   Action action;
   if (distance < 5) {
       action = new JumpAction(actor);
   }
   else if (distance > 5 && distance < 10) {
       action = new WalkAction(actor);
   }
   else {
       action = new DoNothingAction(actor);
   }
   return action;
}

Или альтернативно:

private Action getAction(Actor actor, Distance distance) {
   return
       distance < 5                  ? new JumpAction(actor) :
       distance > 5 && distance < 10 ? new WalkAction(actor) :
       new DoNothingAction(actor);
}
...