powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Отсутствие friend в Java. Кто как с этим живет?
23 сообщений из 23, страница 1 из 1
Отсутствие friend в Java. Кто как с этим живет?
    #39224733
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса.

В Java protected поля видны на уровне пакета ((( Что очень не удобно. Полный отстой в проекте получается. Есть core-классы. Которые содержать основные обрабатываемые сущности:

com.my.core.*

Делать все их поля public не особо хочется. Т.к. есть служебные поля, нужные только во время расчетов. Есть несколько пакетов, которые обеспечивают базовые алгоритмы над этими class'ами. Например пакет:

com.my.raiting.*

Который по достаточно сложным критериям вычисляет разные рейтинги + __куча__ классов передачи параметров туда-обратно нужные для расчета рейтинга.

Проблема в том, что при расчете хочется иметь доступ к внутренним (protected) полям класса для ускорения работы. А нельзя... ((( Приходится городить фигню. Основные алгоритмы расчета складывать в com.my.core, а все служебные классы держать в com.my.raiting. В общем, в проекте помойка получается ((((

Таких расчетов над над базовыми классами несколько и очень достает, что их нельзя как в C++ объявить просто friend классом .

Как как с таким живет? Просто складываете в тот же пакет или как-то по другому решаете проблему?
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224738
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дружище ты чет напутал.

В Java protected поля видны на уровне пакета

Protected scope и package scope это разные вещи. Мне кажется я твою мысль
уже начал улавливать дальше по тексту, но лучше лишний раз переспросить.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224744
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДружище ты чет напутал.

В Java protected поля видны на уровне пакета

Protected scope и package scope это разные вещи. Мне кажется я твою мысль
уже начал улавливать дальше по тексту, но лучше лишний раз переспросить.
Мне казалось одно и то же (((

Пойду погуглю.... )))
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224747
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Погуглил. Толку не много. (((

protected видно или в том же package или в subclass (((

Я subclass делать не хочу. Просто отдельный класс-обработчик. В C++ это легко решается с помощью friend.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224752
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо для собственного кода проблема надуманна. если пару лишних свойств!!! будут public, небо на землю от этого не упадет. мы же про геттеры говорим да?
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224758
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaимхо для собственного кода проблема надуманна. если пару лишних свойств!!! будут public, небо на землю от этого не упадет. мы же про геттеры говорим да?
Я не спорю, что в чем-то надуманная.

Просто когда "собственного кода" > 800 Кб, уже становится сильно не удобно по пакетам лазать ((( Уже сам забываю, как классы называются и кто что делает )))

Наверное правильнее решить через Interface и наплодить get/set'ов... Один интерфейс - доступ к внешним полям объектов (сделано), другой интерфейс - получение внутренних/для расчетов.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224777
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в глубине души я всегда считал игры с private/protected паранойей.
Реальных задач они не решают но обременяют нас ритуалом.

По поводу забывания своего собственного кода - я люто бешено плюсую.
Есть такая беда. Отчасти я ее решал - больше вынося декларации в стандартные
интерфейсы. К примеру если есть где-то поведение похожее на итаратор - имплементировал
итератор. Помогает.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39224997
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevТаких расчетов над над базовыми классами несколько и очень достает, что их нельзя как в C++ объявить просто friend классом .
1. Не рой другому яму - сам в нее попадешь. Незачем без необходимости что-то скрывать от других.
2. За исключением внутренних пакетов Явы легко можно сделать обертку позволяющую забрать что-то из protected методом, а добавлю ка я в этот пакет классик. :)
3. В особо упертых случаях рефлексия.

Все чистой воды IMHO.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225008
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

авторПроблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса.


С вложенными, внутренними классами пробовали покрутить свою ситуацию?

Почитайте Философия джава. Может какие мысли придут.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225014
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeboLeonid Kudryavtsev,

авторПроблема. В C++ у класса можно сделать классы "друзей". Friend-классы видеть private и protected поля из класса.


С вложенными, внутренними классами пробовали покрутить свою ситуацию?

Почитайте Философия джава. Может какие мысли придут.


Там глава есть, в которой Эккель приводит разные примеры с вложенными, внутренними классами. Может это Вам поможет)
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225028
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для себе уже понял, что нужно будет делать два интерфейса. Минимальный для GUI. Максимальный с внутренними структурами для расчетов.

Просто разрабатывается прототип. Т.ч. get'ы/set'ы и интерфейсы делаю по самому минимуму. Все равно перед продакшеном все тотально рефакторится будет.

p.s. начальство вообще закладывает, что весь код выкинуть, нанять программистов, написать заново. Типа "код для продакшена" != "код для прототипа" ))) Продакшен код должен быть какой-то особый )))
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225032
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понятно чего хочет начальство.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225035
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev Продакшен код должен быть какой-то особый )))
Понятное дело, он денег стоит других. :)

Ну и имея рабочий прототип проще написать грамотное ТЗ.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225045
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

com.my.core <- Адаптер или Фасад <- com.my.raiting

P.S.
Но лучше через геттеры.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225059
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225062
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman Как применить KISS к коду?

Ну да))) Забыли - всё гениальное просто)
Только, чтобы виртуозно отсечь лишнее - нужное быть гением)
Вспоминаем скульптуры из куска мрамора. Одно неосторожное движение ...
"Опыт - сын ошибок трудных")
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225134
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЕсть core-классы. Которые содержать основные обрабатываемые сущности:

com.my.core.*

Делать все их поля public не особо хочется. Т.к. есть служебные поля, нужные только во время расчетов. Есть несколько пакетов, которые обеспечивают базовые алгоритмы над этими class'ами. Например пакет:

com.my.raiting.*

Который по достаточно сложным критериям вычисляет разные рейтинги + __куча__ классов передачи параметров туда-обратно нужные для расчета рейтинга.

Проблема в том, что при расчете хочется иметь доступ к внутренним (protected) полям класса для ускорения работы. А нельзя...

С одной стороны в eiffel сделан красивейщий механизм публикации полей/методов. C++ нервно курит в сторонке. Сильно плохо, что Гослинг &Co ничего кроме С++, замученного бинарной совместимостью с Си, не знал.

С другой- при разработке не надо париться- getXXX() и всё. Уровень доступа default нужен только для unit-test'ов, не более.
А когда дойдёт до оптимизации- 99.999% что getXXX() не затормозит ни за наносекунду. Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций).
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225203
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Tomin... Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций).
Что значит "не более 2х реализаций" ?
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225214
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Leonid Kudryavtsev] Т.ч. get'ы/set'ы и интерфейсы делаю по самому минимуму./quot]

А чего только по минимуму, public fields же плохая практика в джаве, да и протектед тоже неочень.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225234
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevAlexey Tomin... Если не увлекаться интерфейсами (inliine работает если у метода есть не более 2х реализаций).
Что значит "не более 2х реализаций" ?

Если есть интерфейс SomeService с методом execute(), то при вызове метода execute() VM может заинлайнить его (или хотя бы заменить invokeDynamic на invokeVirual) если в классах, реализующих этот интерфейс метод execute определён не более двух раз.
Хотя может уже и больше- это информацияф трёхлетней давности.
Грубо - List.size() будет вызван через invokeDynamic, а вот свои интерфейсы- может и будет быстрее.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39225324
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ora601А чего только по минимуму, public fields же плохая практика в джаве, да и протектед тоже неочень.
но хуже всего private. :)
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39226001
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это отголоски НЕДО-ПЕРЕ-проектирования.
...
Рейтинг: 0 / 0
Отсутствие friend в Java. Кто как с этим живет?
    #39228710
Polar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AspectJ

privileged aspect

Вот простой пример. Без изменения core можно добавлять в него свой функционал.
Директива privileged aspect дает доступ ко всем private полям.

Вот пример нашел в поиске
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Отсутствие friend в Java. Кто как с этим живет?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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