Kotlin通用边界
我正试图将我的MVP解决方案从JAVA移植到Kotlin,而我在泛型方面遇到了一个很大的问题。 这是我的JAVA类的样子:
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView public abstract class BasePresenter<V extends BaseView> public interface BaseView
并移植到Kotlin:
abstract class BaseActivity<P : BasePresenter<BaseView>> : AppCompatActivity(), BaseView abstract class BasePresenter<V : BaseView> interface BaseView
而当我试图使用
class MainActivity() : MainView, BaseActivity<MainPresenter>()
我得到“类型参数不在其范围内,预期: BasePresenter , 找到MainPresenter ”
Java class BaseActivity
声明P
扩展了BasePresenter<?>
而Kotlin版本声明了BasePresenter<BaseView>
,这显然是不兼容的。
要解决这个问题,可以放宽BaseActivity
类型参数P
如下所示:
abstract class BaseActivity<P : BasePresenter<*>>
或者如果你希望通过编译器进行更多的类型检查,你可以像下面这样指定类型参数:
abstract class BaseActivity<TPresenter : BasePresenter<TView>, TView : BaseView> : AppCompatActivity(), BaseView
然后用它作为:
class MainPresenter : BasePresenter<MainView>() class MainActivity() : MainView, BaseActivity<MainPresenter, MainView>()