Создаем объект, в переменных объекта есть список. мы передаем в конструктор в переменную ссылку на новый список.
Human dad = new Human("Батя", true, 30, new ArrayList<>());
а потом дополнительно добавляем все что нужно в этот список:
dad.children.add(child1);
dad.children.add(child2);
dad.children.add(child3);
а как можно сократить запись такого кода и сразу в параметры при создании объекта передавать объекты сразу в список:
Human dad = new Human("Батя", true, 30, (child1, child2, child3));
тип как нибудь так:D
я так понимаю просто переделать конструктор, чтобы он по умолчанию сразу передавал new ArrayList<>() новой переменной, но как сразу добавлять в этот список объекты? в голову просто приходит написание отдельного метода, который будет на себя принимать объекты нужного класса и использовать array.add.
Так вот, а можно ли как нибудь еще по другому? Может я о каком то методе из стандартного набора не знаю? Может есть что то вроде addAll, только принимающий не списки, а объекты? чтобы не писать километры array.add?
DecaDan4ik
22 уровень
как можно сократить такой код?
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JustinianJudge в Mega City OneMaster
3 апреля 2020, 22:00решение
Ну варгс можно написать, но...что значит километры?
Для тебя три строки это километры кода и ты уже от кода устал?
Первый вариант самый нормальный,
просто четко и понятно.
Часто новичкам все хочется усложнить, обязательно в одну строку вставить, еще что..
В джаве меньше кода это не значит круче.
Код должен быть эффективным, лаконичным но читабельным.
Но не коротким, потом эта краткость таким боком вылезет, что один раз с этим столкнувшись на всю жизнь запомнишь, пока это личного опыта нету, я понимаю тяжело без ориентиров что такое хорошо, что такое плохо.
Но пока выброси с головы "сокращение кода". Пиши рациональный код, эффективный, лаконичный.
+В реальной жизни либо ты будешь добавлять как я привел:
хотя это кстати можно заменить:
короче, но хуже.
либо это будет что-то из серии:
Это учебная задача, решил ее, и пошел дальше. Оптимизировать здесь нечего, вот с 11-12 уровня уже можно будет работать над оптимизацией, а пока даже не думай, от тебя требуется только решение задач. И забудь вообще слово "краткость", есть слово лаконичность.
И три строка с add это лаконичней чем одной но большой строки в этом случае.
+2
DecaDan4ik
3 апреля 2020, 23:06
ну километры это преувеличение) я наверное не так выразился. я к тому что если нужно добавить много таких объектов.
Тут даже не вопрос оптимизации, просто интересует функционал, что можно, что нельзя. Можно ли так поменять конструктор и можно ли так передавать параметры. Что работает, что нет. Прощупываю почву так сказать. Интересно же.
а чем будет хуже Collections.addAll(childs, child1, child2, child3); чем просто добавление по одному элементу?
p.s. спасибо за советы и разъяснение.
p.s.s. ну новички на то и новички, хотя тут даже усложнять не нужно, и так все сложно и непонятно:D
0
JustinianJudge в Mega City OneMaster
3 апреля 2020, 23:49решение
все нормально, все через это проходят, даже те кто работают тоже проходят, но на своем уровне :)
Чем хуже
это уже вопрос вкусовщины на самом деле, мне на практике встречалось реже.
Но если подумать, даже банально , когда все в разных строках захотел добавить еще 5 чайлдов, за полсекунды нажал CTRL+D добавил, заходил убрать, нажал CTRL+Y убрал. А в одной строке это править гораздо тяжелей.
Да и это как
https://www.youtube.com/watch?v=kQKrmDLvijo
одно дискретное действие
childs.add(child);
четко понятно, захотели убрали, клонировли, добавили, ничего не ломается.
Это как с пистолета стрельнуть раз :)
Если все в одну строку..то это как мечем махать со стороны в сторону, красиво, в одной строки, разнообразно, но..
Снова-таки вопрос вкуса.
Varargs, то о чем ты спрашивал, можешь погуглить varargs java
вот можешь посмотреть:
https://javarush.com/help/41467#discussion
там примеры есть
Главное побольше оптимизма и не останавливайся :) Успехов!
+2
DecaDan4ik
4 апреля 2020, 00:25
Понял, принял) Большое спасибо за информацию)
0