Классами по умолчанию в Kotlin являются public
, поэтому каждый член / функция открыт для внешнего мира.И наоборот, в Java видимость по умолчанию, в которой пропущено ключевое слово видимости, например public
, protected
или private
, равно package-private
.
SolarEdgeException
равно package-private
, в то время как его пользовательSiteStorage
полностью public
.
Это означает, что пользователь SiteStorage
вообще не может поймать или использовать ваше исключение.
К сожалению, у Котлина нет концепцииpackage-private
, поскольку управление пакетами осуществляется не так, как в Java.
Лучшее, что вы можете получить, это internal
, что означает, что определение доступно всему модулю.
Я быскажем, в этом случае, сделайте SolarEdgeException
класс public
, поддерживая конструктор как package-private
.
Существует ветка форума о package-private
видимости для Kotlin, это интересное чтение.
kotlin-to-support-package-protected-visibility