Java 您能否定义Kotlin接口的作用域以仅用于某些类?

Java 您能否定义Kotlin接口的作用域以仅用于某些类?,java,android,swift,kotlin,Java,Android,Swift,Kotlin,我主要来自iOS背景。在Swift中,我们可以制定旨在通过特定类实现的协议: protocol MyViewControllerProtocol where Self: UIViewController { func doViewControllerThings() } 这非常强大,因为它允许我们使用默认实现扩展协议,并在self extension MyViewControllerProtocol { func doViewControllerThings() {

我主要来自iOS背景。在Swift中,我们可以制定旨在通过特定类实现的协议:

protocol MyViewControllerProtocol where Self: UIViewController {
    func doViewControllerThings()
}
这非常强大,因为它允许我们使用默认实现扩展协议,并在
self

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

我正试图在Kotlin为一个Android项目做类似的事情。这是可能的吗?

严格来说不是。您可以添加一个泛型属性,该属性旨在让实现者返回自身,但编译器不会阻止您提供其他对象来满足该属性

interface SomeInterface {
    val thisRef: Activity

    // ... 
}
上述接口可以在其默认函数实现中调用thisRef上的函数

实现类必须为
thisRef
提供值:

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

    //...
}

现在,您可以只说
协议MyViewControllerProtocol:UIViewController
。Kotlin不能,但Scala可以:)
trait MyViewControllerProtocol{self:UIViewController=>…}