|
|
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Проблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса. В Java protected поля видны на уровне пакета ((( Что очень не удобно. Полный отстой в проекте получается. Есть core-классы. Которые содержать основные обрабатываемые сущности: com.my.core.* Делать все их поля public не особо хочется. Т.к. есть служебные поля, нужные только во время расчетов. Есть несколько пакетов, которые обеспечивают базовые алгоритмы над этими class'ами. Например пакет: com.my.raiting.* Который по достаточно сложным критериям вычисляет разные рейтинги + __куча__ классов передачи параметров туда-обратно нужные для расчета рейтинга. Проблема в том, что при расчете хочется иметь доступ к внутренним (protected) полям класса для ускорения работы. А нельзя... ((( Приходится городить фигню. Основные алгоритмы расчета складывать в com.my.core, а все служебные классы держать в com.my.raiting. В общем, в проекте помойка получается (((( Таких расчетов над над базовыми классами несколько и очень достает, что их нельзя как в C++ объявить просто friend классом . Как как с таким живет? Просто складываете в тот же пакет или как-то по другому решаете проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 13:33 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Дружище ты чет напутал. В Java protected поля видны на уровне пакета Protected scope и package scope это разные вещи. Мне кажется я твою мысль уже начал улавливать дальше по тексту, но лучше лишний раз переспросить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 13:37 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
maytonДружище ты чет напутал. В Java protected поля видны на уровне пакета Protected scope и package scope это разные вещи. Мне кажется я твою мысль уже начал улавливать дальше по тексту, но лучше лишний раз переспросить. Мне казалось одно и то же ((( Пойду погуглю.... ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 13:40 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Погуглил. Толку не много. ((( protected видно или в том же package или в subclass ((( Я subclass делать не хочу. Просто отдельный класс-обработчик. В C++ это легко решается с помощью friend. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 13:44 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
имхо для собственного кода проблема надуманна. если пару лишних свойств!!! будут public, небо на землю от этого не упадет. мы же про геттеры говорим да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 13:51 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
chpashaимхо для собственного кода проблема надуманна. если пару лишних свойств!!! будут public, небо на землю от этого не упадет. мы же про геттеры говорим да? Я не спорю, что в чем-то надуманная. Просто когда "собственного кода" > 800 Кб, уже становится сильно не удобно по пакетам лазать ((( Уже сам забываю, как классы называются и кто что делает ))) Наверное правильнее решить через Interface и наплодить get/set'ов... Один интерфейс - доступ к внешним полям объектов (сделано), другой интерфейс - получение внутренних/для расчетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 14:00 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Где-то в глубине души я всегда считал игры с private/protected паранойей. Реальных задач они не решают но обременяют нас ритуалом. По поводу забывания своего собственного кода - я люто бешено плюсую. Есть такая беда. Отчасти я ее решал - больше вынося декларации в стандартные интерфейсы. К примеру если есть где-то поведение похожее на итаратор - имплементировал итератор. Помогает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 14:13 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevТаких расчетов над над базовыми классами несколько и очень достает, что их нельзя как в C++ объявить просто friend классом . 1. Не рой другому яму - сам в нее попадешь. Незачем без необходимости что-то скрывать от других. 2. За исключением внутренних пакетов Явы легко можно сделать обертку позволяющую забрать что-то из protected методом, а добавлю ка я в этот пакет классик. :) 3. В особо упертых случаях рефлексия. Все чистой воды IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 17:32 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, авторПроблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса. С вложенными, внутренними классами пробовали покрутить свою ситуацию? Почитайте Философия джава. Может какие мысли придут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 17:48 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
NeboLeonid Kudryavtsev, авторПроблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса. С вложенными, внутренними классами пробовали покрутить свою ситуацию? Почитайте Философия джава. Может какие мысли придут. Там глава есть, в которой Эккель приводит разные примеры с вложенными, внутренними классами. Может это Вам поможет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 17:53 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Для себе уже понял, что нужно будет делать два интерфейса. Минимальный для GUI. Максимальный с внутренними структурами для расчетов. Просто разрабатывается прототип. Т.ч. get'ы/set'ы и интерфейсы делаю по самому минимуму. Все равно перед продакшеном все тотально рефакторится будет. p.s. начальство вообще закладывает, что весь код выкинуть, нанять программистов, написать заново. Типа "код для продакшена" != "код для прототипа" ))) Продакшен код должен быть какой-то особый ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:17 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно чего хочет начальство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:20 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev Продакшен код должен быть какой-то особый ))) Понятное дело, он денег стоит других. :) Ну и имея рабочий прототип проще написать грамотное ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:24 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:39 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:51 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Usman Как применить KISS к коду? Ну да))) Забыли - всё гениальное просто) Только, чтобы виртуозно отсечь лишнее - нужное быть гением) Вспоминаем скульптуры из куска мрамора. Одно неосторожное движение ... "Опыт - сын ошибок трудных") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:59 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevЕсть core-классы. Которые содержать основные обрабатываемые сущности: com.my.core.* Делать все их поля public не особо хочется. Т.к. есть служебные поля, нужные только во время расчетов. Есть несколько пакетов, которые обеспечивают базовые алгоритмы над этими class'ами. Например пакет: com.my.raiting.* Который по достаточно сложным критериям вычисляет разные рейтинги + __куча__ классов передачи параметров туда-обратно нужные для расчета рейтинга. Проблема в том, что при расчете хочется иметь доступ к внутренним (protected) полям класса для ускорения работы. А нельзя... С одной стороны в eiffel сделан красивейщий механизм публикации полей/методов. C++ нервно курит в сторонке. Сильно плохо, что Гослинг &Co ничего кроме С++, замученного бинарной совместимостью с Си, не знал. С другой- при разработке не надо париться- getXXX() и всё. Уровень доступа default нужен только для unit-test'ов, не более. А когда дойдёт до оптимизации- 99.999% что getXXX() не затормозит ни за наносекунду. Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:29 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin... Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций). Что значит "не более 2х реализаций" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 23:56 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
[quot Leonid Kudryavtsev] Т.ч. get'ы/set'ы и интерфейсы делаю по самому минимуму./quot] А чего только по минимуму, public fields же плохая практика в джаве, да и протектед тоже неочень. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 03:16 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevAlexey Tomin... Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций). Что значит "не более 2х реализаций" ? Если есть интерфейс SomeService с методом execute(), то при вызове метода execute() VM может заинлайнить его (или хотя бы заменить invokeDynamic на invokeVirual) если в классах, реализующих этот интерфейс метод execute определён не более двух раз. Хотя может уже и больше- это информацияф трёхлетней давности. Грубо - List.size() будет вызван через invokeDynamic, а вот свои интерфейсы- может и будет быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 08:11 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
ora601А чего только по минимуму, public fields же плохая практика в джаве, да и протектед тоже неочень. но хуже всего private. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 10:21 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
Это отголоски НЕДО-ПЕРЕ-проектирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 18:05 |
|
||
|
Отсутствие friend в Java. Кто как с этим живет?
|
|||
|---|---|---|---|
|
#18+
AspectJ privileged aspect Вот простой пример. Без изменения core можно добавлять в него свой функционал. Директива privileged aspect дает доступ ко всем private полям. Вот пример нашел в поиске ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2016, 19:12 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39228710&tid=2124111]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 212ms |
| total: | 381ms |

| 0 / 0 |
