'public' функция предоставляет свой тип параметра 'public / * package * /' SolarEdgeException - PullRequest
0 голосов
/ 09 марта 2019

У меня есть следующие классы Java и Kotlin:

package nl.friesoft.solaredgenotifier;

class SolarEdgeException extends Exception {
    public SolarEdgeException(String s)  {
        super(s);
    }
}



package nl.friesoft.solaredgenotifier

class SiteStorage(context: Context): ISolarEdgeListener {
    override fun onError(site: Site?, exception: SolarEdgeException?) {
    }
}

И я получаю эту ошибку компиляции:

'public' функция выставляет свой пакет 'public / / 'тип параметра SolarEdgeException

Оба класса находятся в одном пакете, так почему бы не скомпилировать?

1 Ответ

2 голосов
/ 09 марта 2019

Классами по умолчанию в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...