powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по стилю
25 сообщений из 25, страница 1 из 1
Вопрос по стилю
    #37702469
Марс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть код примерно такой по смыслу
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
void method(){

  Map map=new HashMap();
  Map map2=new HashMap();
  Map map3=new HashMap();
  doSomething(map1,map2,map3);

}

void doSomething (Map map1,Map map2,Map map3){
    map1.put("foo","bar");

}



т.е. в метод передаются в качестве параметров какие то объекты и внутри изменяются. Мне не нравится что при чтении кода "method" не понятно что эти объекты внутри метода изменяются.

Вопрос: на эту тему есть какие то конвенции? Название метода, аннотации, соглашение в таких случаях например возвращать мапу с измененными объектами и явно вытаскивать их оттуда?
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702479
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если метод приватный, то нормально. Если туда все кому не лень скармливают данные, то лучше так не делать.
Почитайте про mutable\immutable объекты, в принципе.
Лучше если метод будет возвращать результат. Ещё лучше, если результат будет другой Map. Потому как параметр, ведь может оказатся UnmodifiableMap в какой-то момент.
Если там 3 mutable объекта в параметрах и метод не приватный, то это более чем странно.

Хотя, конечно же, в конкретных ситуациях могут быть нюансы.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702503
Марс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод приватный. Сам люблю когда возвращается конкретный результат и явно видно что метод что-то поменял в переменных но просто получается что заполнение оных мап не является основным смыслом метода - то есть сетером его назвать как то рука не поднимается. Я думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702537
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МарсМетод приватный.
Тогда и париться не стоит. Главное чтобы в контексте класса было легко понять что метод делает.
Правда встаёт вопрос, почему это параметры метода, а не поля класса.

Вообще сложно обсуждать на абстрактном примере. В конкретных случаях всегда есть куча аргументов того или иного подхода.
Никаких специальных аннотаций нет. Напишите JavaDoc к методу, где явно укажите что параметры - mutable.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702589
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МарсЯ думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
Аннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Я обычно помечаю жирным и красным в javadoc. Идея про аннотации понравилась.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702594
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МарсЯ думал может какие то аннотации есть типа что параметр такой то является одновременно и инпутом и аутпутом - ведь если такая возможность предусмотренна (менять переданные внутрь объекты напрямую) то может есть и стандартные способы оформления этого.
Аннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Я обычно помечаю жирным и красным в javadoc. Идея про аннотации понравилась.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702600
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvАннотацию на метод можно самому сделать. Это просто интерфейс по своей сути.

Можно даже на параметр. Вопрос только в том, нужно ли?
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марс,
я всегда пишу приставку Set
SetXXXXX или WriteXXXX
но это когда это основное назначение метода.
В ООП есть инкапсуляция, т.е. мало ли что происходит внутри объекта. Да ещё такого как Main()
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
счас подумал, в Java это наверно пересечётся с сеттерами - "Set"
?
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702693
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123счас подумал, в Java это наверно пересечётся с сеттерами - "Set" ?
На абстрактном примере обсуждать смысла нет. Но еслм метод приватный и занимается обработкой Map. То это точно не set()?
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702699
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702708
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?

DI без доп атрибутов аннотаций будет искать для сеттинга поля

private Service service;
public void setService(Service service;) {
this.service = service;
}

Найдя такой сеттер спринг попробует заинджектит, если класс аргумента , конечно, совпадает с классом поля ;)
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702716
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,
OK

===============
вот, например, у меня есть публичный метод - Добавьте себя на события (как вариант)
COM.SetListEvent(список).
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702736
Марс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретней был кусок кода который обрабатывает DTO и из него вытаскивает (попутно преобразуя) несколько мап и коллекцию. В качестве рефакторинга я вытащил этот код в отдельный метод (потому что по уровню абстракции вся эта логика была лишней в основном методе), но вставл вопрос как возвращать все те объекты которые из дто считываются. То есть это и не сетеры в явном виде (потому что их много и потому что кроме собственно сетера изнутри может дергаться другая логика)

В ретроспективе совсем кошерно было бы создать спец класс с полями соответвующими возвращающим объектам и чистенько доставать их оттуда но мой вопрос был как хэндлится ситуация когда так не сделано (ведь если есть возможность так не делать значит многие так не будут делать.

Вопрос исключительно в удобочитаемости - чтоб при просмотре кода не залезая внутрь метода было понятно что метод изменяет входящие параметры которые потом используются дальше по коду. Например кто-то комментирует в явадоке такие поля как mutable,кто-то выделяет цветом кто-то свои аннотации пишет - я и подумал может стандарт какой-то есть потому что с аннотациями я в силу своей серости ( и проекта работающего на 1.42) не очень знаком.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702753
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Марс,
я за понятность Названия метода.
Дай своему соседу имя, и спроси - что он делает.
2. Код на куски бьют по кускам логики, т.е. опять по НАЗВАНИЮ.
Удачи!
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702756
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МарсКонкретней был кусок кода который обрабатывает DTO и из него вытаскивает (попутно преобразуя) несколько мап и коллекцию. В качестве рефакторинга я вытащил этот код в отдельный метод (потому что по уровню абстракции вся эта логика была лишней в основном методе), но вставл вопрос как возвращать все те объекты которые из дто считываются. То есть это и не сетеры в явном виде (потому что их много и потому что кроме собственно сетера изнутри может дергаться другая логика)

Ничего не понял. DTO не обрабатывают. Их тренсформируют в бизнес сущности. Обычно этим занимается отдельный слой реализованый как AOP - фильром, или другим интерцептором.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37702782
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Озверин,
OK

===============
вот, например, у меня есть публичный метод - Добавьте себя на события (как вариант)
COM.SetListEvent(список).

но не в твоем случае, Set - он не будет трогать.с большой буквы таки ;)..по идее)
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37703131
Йуный джавистЪ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю, ТС пришел из C++, где есть const. В Java такого нет.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37703146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Йуный джавистЪЯ так понимаю, ТС пришел из C++, где есть const. В Java такого нет.
вроде const тут ни при чём.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37703531
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Blazkowicz,
я вот не помню, где имеет значение эти 3 буквы.
То ли в генераторе сеттеров, то ли в IDE.
Зарезервировано ли 3 буквы для публичных? И где это проявится?
Прочитай про javabeans. Это оттуда.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37706702
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Марст.е. в метод передаются в качестве параметров какие то объекты и внутри изменяются. Мне не нравится что при чтении кода "method" не понятно что эти объекты внутри метода изменяются.

Вопрос: на эту тему есть какие то конвенции? Название метода, аннотации, соглашение в таких случаях например возвращать мапу с измененными объектами и явно вытаскивать их оттуда?

К сожалению, это не слабая проблема в java. Отсутствие гарантий неизменяемости объектов со стороны языка вроде позволяют сделать некоторые упрощения для языка, а также и избежать излишнего копирования объектов. Но на самом деле, например, в крупных технических проектах с месивом кода, когда работает куча людей, частенько разной квалификации, как потроха серверов приложений, не редко вынуждены заниматься дублированием объектов с целью каких-то "гарантий", что естественно сказывается на работе с памятью и на перфомансе. И серебряной пули в этих вопросах нет. В функциональных языках с принципами имутабельности объектов тоже есть и технические проблемы, и ряд неудобств. Как с ними пытаются бороться на платформе JVM, можно посмотреть на примере кложуры.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37706725
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100К сожалению, это не слабая проблема в java. Отсутствие гарантий неизменяемости объектов со стороны языка
imho раздутая проблема.
Нехватало ещё const объектов вводить.
И причём Java, если такое же в других ЯП (imho)
В Java обычную БЛ и код не надо разносить на 100 независимых кусков (imho)
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37707065
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123imho раздутая проблема.
Нехватало ещё const объектов вводить.
И причём Java, если такое же в других ЯП (imho)
В Java обычную БЛ и код не надо разносить на 100 независимых кусков (imho)
В том и дело, что проблема как раз и не раздутая, никто не парится, в освновном, (и я тоже), особенно в рамках бизнес-логики. А вот на около-системном уровне не всё так однозначно. Я не работаю на этом уровне, поэтому конкретными примерами сразу завалить не могу. Пару лет назад я читал блог какого-то разработчика из JBoss, он неплохо показывал к каким последствиям приводят многие "незапаривания" в жабе, и почему очень трудно реализовать эффективный жаба-сервер. Всего не помню, но тогда немного полазил в потрохах томката, действительно есть места, где делаются копии данных перед вызовами методов.
Можно почитать про JGit. Его разработчики неплохо раскрывали проблемные места в жабе, вплоть до того, что внутри реализации слоя I/O (как минимум вокруг mmap, если я не вру) тоже не избежать лишних копирований буферов. Их вердикт - оригинал гита по перфомансу им не догнать, но в целом вполне производительное решение.
Можно почитать на какие ухищрения пошли в Disruptor-е, в том числе и чтобы избежать лишние создания объектов.

И совершенно верно, что если ещё и плюсовый const для объектов ввести в язык, то можно закапываться. Лично мне и так жаба как язык не нравится, ни для системного уровня не ахти, ни для написания прикладной логики.
В Эрганге, например, живут без всяких const. Не всегда конечно система может оптимизировать и делать правки по месту вместо копирования, у эрланговцев есть вынужденные хаки. И в кложуре без transients (правок по месту) не обошлись, не сохранили "абсолютную чистоту". Увы, идеального ничего нет.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37707105
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSV100,
тут и проблема imho в Java, что нет чёткого деления по вертикали на системный и несистемный (прикладной).
Отчасти от Веб, который на компонентный ООП сильно не рассчитан.
-----
Если оптимизировать, то можно далеко зайти.
На GameDev совсем в другую сторону ЯП оптимизируют. И т.д.
Т.е. "проще - лучше", что в данном контексте - ДайИмяФункцииЧеловеческое.
Вроде все на этом сошлись.
...
Рейтинг: 0 / 0
Вопрос по стилю
    #37707559
PSV100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123тут и проблема imho в Java, что нет чёткого деления по вертикали на системный и несистемный (прикладной).
Отчасти от Веб, который на компонентный ООП сильно не рассчитан.
Ну, вроде, как раз некая ликвидация деления на системное и неочень и было одной из идеологических причин создания java-платформы. Создатели пытались ликвидировать потребность в связке C/C++ -> питон, луа, свой скриптинг, или какой-нибудь 4GL в ERP-системах и т.д. Причём идеология и архитектура в java-платформе вполне красива и грамотна относительно своих заложенных целей - раз уж взята политика ООП - то язык/платформа во всём объектны до глубины костей. Другое дело, что по прошествию немало лет ООП показало и свои плюсы, и не малые проблемы. Лично я сторонник простоты, например, меня очень привлекает гугловский Go как промышленный язык/платформа (речь не идет о возможности его применения на сегодняшний день). Без кривого ООП решаются те же проблемы, легко и красиво, даже без "функциональщины" (хотя их интерфейсы - те же хаскеловские классы типов или протоколы кложуры, только вид с боку).
Но с другой стороны, это сейчас можно быть таким "шибко умным", насмотревшись на многолетний опыт со стороны (и создатели Go тоже насмотрелись на много чего, при своём опыте в не один десяток лет).

Одним словом, java не идеальна.


Petro123Т.е. "проще - лучше", что в данном контексте - ДайИмяФункцииЧеловеческое.
Вроде все на этом сошлись.
Да, так оно и есть. Просто обидно, что это решение на уровне скриптовых языков с динамической типизацией, без железных гарантий, при этом жаба так и не имеет их лёгкости, несмотря на все чудеса жабских IDE, с их автокомплитами и прочими семантическими анализами.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по стилю
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]