|
|
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
У меня возникли сомнения по поводу правильности реализации следующего: автор- В ситуациях, где явно не нужно использовать ссылку на внешний класс, реализовывайте внутренние классы статическими. - Хорошим же тоном при архитектурном проектировании служит полное избегание изменяемых статических объектов, зачастую существует лучшая альтернатива. 1) Учитывая вышесказанное, правильно ли будет делать AlarmTask как статик класс, он же тоже внутренний ? 2) Не будет тут утечек памяти? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 12:45 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
по ошибке оставил gt.getAlarm(); и public void setAlarm(Alarm alarm) { this.alarm = alarm; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 12:50 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174- В ситуациях, где явно не нужно использовать ссылку на внешний класс, реализовывайте внутренние классы статическими. Ну, вполне разумно. Статический внутренний класс не связан с экземпляром, поэтому будет меньше связность между внешним классом и внутренним. Что хорошо для будущих рефакторингов. rema174- Хорошим же тоном при архитектурном проектировании служит полное избегание изменяемых статических объектов, зачастую существует лучшая альтернатива. Я бы не стал называть "дизайн", который по-сути "тактика", "архитектурой", которая по-сути - "стратегия". "полное избегание изменяемых статических объектов" - это вынос мозга какой-то. Похоже на кривой перевод. Мне даже понять сложно что под этим имеется ввидуи почему. rema1741) Учитывая вышесказанное, правильно ли будет делать AlarmTask как статик класс, он же тоже внутренний ? Да, по-умолчанию внутренний класс лучше делать статическим, пока явно не требуется обратного. rema1742) Не будет тут утечек памяти? Утечки класса это рантайм. Они возникают из-за того как код реализован в методах, а не из-за структуры классов. Но, конечно, нужно понимать, что ссылка на объект внутрений не статического класса держит ссылку на экземпляр внешнего класса. Соответсвенно если внутренний класс это слушатель и мы его где-то привязываем в глобальные реестр, логично и очевидно, что объект внешнего класса тоже будет привязан. Количетво WTF на строчку кода зашкаливает, поэтому коментировать код не берусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 13:04 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz"полное избегание изменяемых статических объектов" - это вынос мозга какой-то. Похоже на кривой перевод. Мне даже понять сложно что под этим имеется ввидуи почему. тут речь о том что статическая переменная хранится своим классом, а как следствие, его загрузчиком(classloader). По причине внешнего использования увеличивается шанс, что сборщик мусора не соберёт данный экземпляр. Также зачастую в static-переменных кэшируется информация или же хранятся состояния, используемые несколькими потоками. BlazkowiczКоличетво WTF на строчку кода зашкаливает, поэтому коментировать код не берусь.по-моему, там все достаточно прозрачно. это не самостоятельный код - просто конкретный момент общей ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 13:43 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174тут речь о том что статическая переменная хранится своим классом, а как следствие, его загрузчиком(classloader). По причине внешнего использования увеличивается шанс, что сборщик мусора не соберёт данный экземпляр. Также зачастую в static-переменных кэшируется информация или же хранятся состояния, используемые несколькими потоками. Не виже связи между статическим полем и внутренним статичским классом. Вы начали тему про вложеные классы, а здесь зачем-то пишете про поля. Разные же сущности, разные проблемы. rema174по-моему, там все достаточно прозрачно. это не самостоятельный код - просто конкретный момент общей ситуации. Ну, как для демонстрации, слишком много мусора. Можно же было как-то проще описать. Статическое поле внутри Alarm в комбинации с кодом в конструкторе, а так же конструирование объекта без явного сохранения ссылки на него - уже попахивают на весь форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 13:52 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Статическое поле внутри Alarm в комбинации с кодом в конструкторе конкретно такое использование аларм я нашел на стаковерфлоу... а что не так про статическое поле? вы же сами говорили, что AlarmTask правильно сделан статическим. если timer сделать не статическим, то понадобится сделать класс AlarmTask не статическим, чтобы исользовать в run() -> timer.cancel(); Blazkowiczтак же конструирование объекта без явного сохранения ссылки на него это про new Alarm(date); ? или new Thread(gt) ? или new AlarmTask() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:13 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174конкретно такое использование аларм я нашел на стаковерфлоу... Иногда нужно иметь своё мнение. rema174а что не так про статическое поле? Оно не final и не синглтон. Можно сколько угодно раз перезаписывать и не известно какой именно экземпляр будет "отменен" при вызове Alarm.timer.cancel(). rema174вы же сами говорили, что AlarmTask правильно сделан статическим. И? rema174если timer сделать не статическим, то понадобится сделать класс AlarmTask не статическим, чтобы исользовать в run() -> timer.cancel(); Есть 100500 способов передать ссылку. Вы же оправдываете один кривой способ, ещё большей кривостью другого. Но почему их всего два? rema174это про new Alarm(date); Да, реальный говнокод. Зачем нужен конструктор экземпляра, задача которого просто заполнить статическое поле? Не логичнее ли было специальный setter для этого поля завести? Экземпляр создаётся и нигде не используется. Даже сам себя не регистриурет, что тоже было бы криво, но всё же. И это всё должно наводить на мысль. А на кой нам вообще конструктор в Alarm? rema174 или new Thread(gt) - экземпляр используется для вызова метода. Очевидно же. rema174 или new AlarmTask() ? - экземпляр используется как аргумент метода. Очевидно же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:25 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
BlazkowiczИногда нужно иметь своё мнение. Лишь бы свое мнение не было оправданием для критики другого мнения, отличного от своего... Blazkowiczrema174вы же сами говорили, что AlarmTask правильно сделан статическим. И? это горилось в контесте всего абзаца и читаться должно было тоже в контесте... BlazkowiczЕсть 100500 способов передать ссылку. Вы же оправдываете один кривой способ, ещё большей кривостью другого. Но почему их всего два?если вам ближе какой-то другой способ, то я воспользуюсь цитатой: Иногда нужно иметь своё мнение. BlazkowiczЗачем нужен конструктор экземпляра, задача которого просто заполнить статическое поле? Не логичнее ли было специальный setter для этого поля завести? Экземпляр создаётся и нигде не используется. Даже сам себя не регистриурет, что тоже было бы криво, но всё же. И это всё должно наводить на мысль. А на кой нам вообще конструктор в Alarm? Конструктор экземпляра не просто заполняет статическое поле, так еще и метод вызывается, ага? Завести сеттер - может глобально и классически правильно и знакомо, но конкретно там - это еще больше строчек кода. Сделай сеттер, создай экземпляр, заполни его, а потом и метод вызови, а тут, сразу аргументом передали, заполнили и там же вызвали метод... быстро. точка. Хотел было процитировать про 100500 способов... но обойдусь упоминанием :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 14:55 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174BlazkowiczЕсть 100500 способов передать ссылку. Вы же оправдываете один кривой способ, ещё большей кривостью другого. Но почему их всего два?если вам ближе какой-то другой способ, то я воспользуюсь цитатой: Иногда нужно иметь своё мнение. В данном конкретном случае будет лучше прислушаться к мнению народа, а не к своему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:13 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174Завести сеттер - может глобально и классически правильно и знакомо, но конкретно там - это еще больше строчек кода. Бред. Есть WTF код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И совершенно аналогичный, но уже нормально читаемый. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. С фига ли в нем больше строк? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:15 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
rema174Лишь бы свое мнение не было оправданием для критики другого мнения, отличного от своего... Ну, вот. Обидки начались. Вы привели код (логично предположить что вы его автор, так как иного не указано). Я вам резонно задал вопрос\критику по коду. Вы вместо ответа получил железный аргументе - "я это увидел на stackoverflow". Ну, ок. Тогда зачем его было сюда вываливать? rema174это горилось в контесте всего абзаца и читаться должно было тоже в контесте... У меня память на контексты ограничена. Нужно либо цитировать. Либо писать полные самостоятельные предложения. Тогда будет больше шансов получить на столько же полный ответ. [quot rema174]если вам ближе какой-то другой способ, то я воспользуюсь цитатой: Иногда нужно иметь своё мнение. Нить разговора окончательно утеряна. Надеюсь кто-то другой разъяснит понятнее. Удачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:20 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
Код: java 1. постоянно встречаешь такую конструкцию. пусть этот экземпляр создаётся и нигде не используется... он выполнил что надо и был собран gc Blazkowicz но уже нормально читаемыйчиталось имхо и так нормально ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:02 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
А что будет, если сделать так: Код: java 1. 2. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 16:51 |
|
||
|
Внутренний статичесский класс
|
|||
|---|---|---|---|
|
#18+
второй будильник не завершится... если же сделать AlarmTask не статик, то оба завершатся, как-то не понятно получается... слегка изменил, так работает: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 18:08 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=173&tid=2127132]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 258ms |
| total: | 448ms |

| 0 / 0 |
