Kotlin не любит выставлять внутренние API в публичных методах, и даже делает это, если вы делаете это.Это также влияет на код Java, если вы вызываете код из Kotlin, но выдает исключение во время выполнения, а не во время компиляции.
Что касается решений, у Kotlin есть internal
, но это действительно специальное ключевое слово:в отличие от частного пакета Java (без модификатора), внутренний делает его видимым везде в модуле.
Это также одно решение: конвертировать в Kotlin и использовать internal
.Если вы создаете библиотеку, она не будет видна за пределами модуля, но вы сможете объявить ее как минимум внутри.
Второй - преобразование интерфейса в класс и использование sealed class
.Обратите внимание, что для этого необходимо, чтобы все дочерние элементы были объявлены в одном файле.См. this для получения дополнительной информации о закрытых классах.
И окончательное решение: сделайте его публичным.Я очень рекомендую вам пойти на это по сравнению с другими альтернативами, в основном потому, что это самый простой вариант, который не требует хакерского дизайна.Кроме того, если вы планируете получить доступ к интерфейсу в другом месте, вам придется использовать конкретные реализации, а не общий суперкласс, что не всегда возможно (хотя зависит от вашего использования).
И естьтакже вариант использования только Java, но я предполагаю, что вы бы предпочли микширование, так как вы уже делаете это.Но, как сказал Майкл , вам следует избегать такого дизайна: это плохой дизайн.Если бы я был тобой, я бы обнародовал это в любом случае.