public static void runWorkingProcess() {
for(int i = 0; i < astronauts.size(); i++){
if(astronauts.get(i) instanceof Human){
pilot((Human) astronauts.get(i));
} else if (astronauts.get(i) instanceof Dog) {
createDirection((Dog) astronauts.get(i));
} else if(astronauts.get(i) instanceof Cat){
research((Cat) astronauts.get(i));
}
}
}Semyon Baryshnikov
30 уровень
Слишком ли это кривое решение?
Обсуждается
Комментарии (13)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #3327891
4 сентября 2023, 19:32
разработчики Java рекомендуют использовать enhanced for, если он уместен
0
Денис Enterprise Java Developer
4 сентября 2023, 13:55
Не имея условий и кода сложно что-то подсказывать. Выглядит как задачка написанная человеком не знающим о полиморфизме.
Куда как логичнее было бы в классе (интерфейсе) Astronaut сделать метод work() который реализовать во всех наследниках, и в форыче просто дёрнуть его у всех астронавтов из списка.
0
hidden #3303140
4 сентября 2023, 16:18
Она так составлена дурацки
0
Денис Enterprise Java Developer
4 сентября 2023, 18:32
Это кстати упущенная возможность как мне кажется, если бы задачи шли парами, где в первой заставляют тебя реализовать функционал рагульно, как тут, а в следующей показали "а теперь смотри как надо". Люди бы сразу поняли прелести ООП :)
0
hidden #3327891
4 сентября 2023, 19:30
С высокими шансами не пройти чекер в итоге 🤦♂️
Пусть и выглядеть будет логично до поры до времени
0
Денис Enterprise Java Developer
5 сентября 2023, 07:14
Ты если что-то умное пытаешься сказать - говори так, чтобы тебя люди понимали :)
+4
hidden #3327891
6 сентября 2023, 19:14
Ладно, сейчас понятно напишу. Готовы?))
Я не против, как могло показаться, доработки интерфейса Astronaut и использования его в цикле, поддерживаю удачную мысль. Но проверка задачи чекером JavaRush может быть неуспешной, хотя такая доработка и выглядит логичной, и коллега потратит дополнительное время на "исправление" кода.
"До поры до времени" означает, что рано или поздно класс/интерфейс надо будет каким-то образом расширять под появляющиеся потребности.
Это вот, что я пытаюсь вам сказать))
0
Денис Enterprise Java Developer
6 сентября 2023, 19:36
Проверка не будет успешной естественно, валидатор, в сущности являющийся набором тестов, ожидает что в коде есть и используются разные методы типа pilot, createDirection, research и все эти методы принимают аргументы конкретного подтипа (ведь принимай они тип Astronaut, зачем нужно было бы приведение типов?). Здесь как ни изгаляйся - не получится пропихнуть нормальное решение :)
Я потому и говорю что задача имеет спорный образовательный характер и не плохо бы шла в паре с "правильной" реализацией.
0
hidden #3327891
6 сентября 2023, 19:43
А можешь, плиз, набросать код, как бы такое могло выглядеть, с "правильной" реализацией?
Что-то похожее на эту задачу с астронавтами, но не прямо ее.
0
Денис Enterprise Java Developer
6 сентября 2023, 22:51
Да хотя бы так например
Уже было бы бодрее :)
Саму задачу про астронавтов я к сожалению не видел и скорее всего не увижу, можно предположить, что там работа производится в сервисном слое, методы которого почему-то сильно зависим от типа аргумента. Если тут используются какие-то внешние зависимости, таких которых у рабочего почему-то нет, то наверное это имеет смысл, но все равно дурно пахнет с точки зрения архитектуры. Можно было бы перекинуть их в абстрактного родителя например в виде DI, тогда наследники могли бы иметь к ним доступ и реализовывать логику на своём уровне.
А если классы наследники прям так кардинально отличаются друг от друга, есть ли вообще смысл в общем интерфейсе?) ну в смысле это чисто контейнер получается. Но тогда есть смысл разнести работу каждого типа в отдельный же сервис, который бы работал с объектами конкретного типа, после чего собрать их в кучу и в ростере находить нужный. Например так. Но это уже просто proof of concept :) Можно даже так
Целью абстракции и является построение системы максимально гибкой и расширяемой. Нужно тебе добавить завтра к астронавтам нового - это действие не должно заставлять тебя переписывать пол кодовой базы где идут вот такие валидации как в примере выше.
0
hidden #3327891
7 сентября 2023, 06:08
Спасибо!
Саму задачу про астронавтов я к сожалению не видел и скорее всего не увижу
Почему же? Любую задачу можно по ссылке вверху открыть?
Задача по астронавтов
0
Денис Enterprise Java Developer
7 сентября 2023, 07:11
Да я ж без подписки тут уже пару лет, так что ни условий нифига не видно )
+1
Стас ПасинковSoftware Developer в ZipyMaster
8 сентября 2023, 21:17
тут багато людей без підписки)
*хник*
![]()

0