Наследование и видимость интерфейсов - PullRequest
0 голосов
/ 10 октября 2019

Задача состоит в том, чтобы скрыть интерфейс Library11 за фасадом библиотеки 2.

Полный источник здесь https://bitbucket.org/tim4dev/inheritance-interfaces/src/master/

  1. (Library1) interface1
  2. (Library2)интерфейс2: интерфейс1
  3. (библиотека2) Класс2: интерфейс2
  4. (приложение)
implementation project(":library2")
class KlassApp constructor(
    private val klass: Interface2
) {
    fun klassAppFun() {
        klass.interface1fun1()
    }
}

Получается ошибка

KlassApp.kt: Unresolved reference: interface1fun1

Вопрос : по каким стандартным рисункам можно скрыть Library1 за фасадом Library2?

1 Ответ

2 голосов
/ 10 октября 2019

Вам нужно выбрать:

  1. сделать Library1 api зависимость Library2, а не implementation , как у вас сейчас есть (так что не скрывайте это полностью);

  2. если вы хотите скрыть это, вы не можете выставлять какие-либо типы Library1 в открытых частях Library2, включая расширение его интерфейсов.

См. документацию для разницы api и implementation:

Так, когда вы должны использовать APIконфигурация? Зависимость API - это та, которая содержит по крайней мере один тип, представленный в двоичном интерфейсе библиотеки, часто называемом его ABI (двоичный интерфейс приложения). Это включает, но не ограничивается:

  • типы, используемые в суперклассах или интерфейсах

  • типы, используемые в открытыхпараметры метода, включая общие типы параметров (где public - это то, что является видимым для компиляторов. Т.е. public, protected и пакетные закрытые члены в мире Java)

  • типы, используемые в открытых полях

  • типы публичных аннотаций

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