gpt4 book ai didi

泛型:抽象类和子类型

转载 作者:行者123 更新时间:2023-12-02 13:00:55 24 4
gpt4 key购买 nike

我有一个名为 presenter 的抽象类:

abstract class Presenter<V> {

fun bind(view: V) {
...
}

...
}

我有这些演示者的实现:

class FolderChooserPresenter : Presenter<FolderChooserView>() {
...
}

查看指定点调用bind方法的类:

class FolderChooserActivity : BaseView(), FolderChooserView {

@Inject lateinit var presenter: FolderChooserPresenter

// method of baseview
override fun onStart() {
super.onStart()

presenter.bind(this)
}
}

我想要实现的是为像 FolderChooserActivity 这样的类创建一个基类,它会自动调用绑定(bind)方法。
在所有实现中一遍又一遍地重复这些调用感觉很愚蠢。

我的方法是使用一个抽象类来扩展调用绑定(bind)方法的 BaseView。但这显然行不通,因为绑定(bind)类需要实现而不是抽象类。

最佳答案

您可以将两个通用参数添加到您的 BaseView 类,并将 this 转换为 V:

open class Presenter<V> {
fun bind(v: V) {}
}

open class BaseView<P, V> where P : Presenter<V> {
lateinit var presenter: P

fun onStart() {
p.bind(this as V)
}
}

你会像这样使用它

class FolderPresenter : Presenter<FolderChooserView>() {

}

class FolderChooserView : BaseView<FolderPresenter, FolderChooserView>()

不幸的是,由于未经检查的转换,如果混淆了参数,您将无法从编译器获得任何帮助:

class SomeOtherView : BaseView<SomeOtherPresenter, FolderChooserView>()

关于泛型:抽象类和子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34526021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com