Можете ли вы использовать интерфейс Kotlin для использования только с определенными классами? - PullRequest
1 голос
/ 14 апреля 2020

Я родом из iOS фона. В Swift мы можем создавать протоколы, разработанные для реализации определенными c классами:

protocol MyViewControllerProtocol where Self: UIViewController {
    func doViewControllerThings()
}

Это очень мощный инструмент, поскольку он позволяет нам расширять протокол с помощью реализации по умолчанию и использовать методы на self

extension MyViewControllerProtocol {
    func doViewControllerThings() {
        self.view.addSubview(UIView())
    }
}

Я пытаюсь сделать нечто подобное в Kotlin для проекта Android. Это возможно?

1 Ответ

1 голос
/ 14 апреля 2020

Не строго. Вы можете добавить свойство generi c, которое предназначено для того, чтобы разработчик возвращал себя, но компилятор не помешает вам предоставить какой-либо другой объект для удовлетворения этого свойства.

interface SomeInterface {
    val thisRef: Activity

    // ... 
}

Приведенный выше интерфейс может Вызовите функции в thisRef в своих реализациях функций по умолчанию.

Реализующий класс должен предоставить значение для thisRef:

class MyActivity: Activity(), SomeInterface {
    override val thisRef = this

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