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