https://kotlinlang.org logo
Title
n

Nikitenko Gleb

02/10/2023, 10:55 AM
Всем привет! Всего лишь уточнить.... package-private нам стоит ожидать хотя бы в ближайшем обозримом будущем? Или уже окончательно распрощаться с этой идеей? Сейчас планируем архитектуру и хотелось бы принять заведомо правильное и долгосрочное решение. Спасибо.
d

dmitriy.novozhilov

02/10/2023, 10:58 AM
Финального решения не ожидается в ближайшем будущем (как минимум до 2.2 точно)
n

Nikitenko Gleb

02/10/2023, 10:59 AM
Понял. Большое спасибо!
a

Aleksey Tomin

02/10/2023, 11:14 AM
А зачем нужен, этот package-private? Он же “взламывается” из другого модуля. Чем internal не подходит? Я для своего развития, если что 🙂
d

dmitriy.novozhilov

02/10/2023, 11:15 AM
Есть проблема, когда есть несколько модулей в рамках одной библиотеки, и хочется что-то шарить только между этими модулями, не отдавая наружу И
internal
, и
package-private
не решают этой проблемы
n

Nikitenko Gleb

02/10/2023, 11:17 AM
Кстати, классное замечание. У меня аргументы проще, но не менее болезненее: интернал -влечёт высоко гранулярную помодульность. И часто это бывает избыточно и неудобно
Создать модуль != создать пакет. Да и технически модуль != пакет. Over-модульной суеты - когнитивно сильно больше, чем с пакетами
Однако если создание модуля достигнет такой же простоты как и пакета....и будет автоматизировано или скрыто от разработчика - то и не особо этот package private нужен
i

Iaroslav Postovalov

02/10/2023, 1:19 PM
@dmitriy.novozhilov я и сам использовал, и в других библиотеках видел, что такую вещь обычно делают через экспериментальные аннотации вида
@InternalSomeLibraryApi
d

dmitriy.novozhilov

02/10/2023, 1:21 PM
Да, это один из workaround'ов Другой -- это
internal
+
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
Из-за их наличия эта проблема не в большом приоритете
n

Nikitenko Gleb

02/10/2023, 1:22 PM
Только узнал, спасибо.
i

Iaroslav Postovalov

02/10/2023, 1:22 PM
Ну это жесть… Хотя авторы либ и не такое делают...
n

Nikitenko Gleb

02/10/2023, 1:22 PM
хотя... межпакетно инкапсулировать - это вряд ли поможет
d

dmitriy.novozhilov

02/10/2023, 1:23 PM
Если что, вариант с
Suppress
-- это не рекомендация Никогда не надо саппресить ошибки
i

Iaroslav Postovalov

02/10/2023, 1:23 PM
Скажи это
UNCHECKED_CAST
, заткнутому на каждом углу.
d

dmitriy.novozhilov

02/10/2023, 1:23 PM
Попрошу, это warning
i

Iaroslav Postovalov

02/10/2023, 1:24 PM
А, действительно.