Kotlin中的泛型扩展

时间:2017-08-22 14:40:47

标签: android generics kotlin mvp extends

我试图将java项目移植到kotlin并且遇到一些问题。我在java中使用泛型

有一些MVP结构
interface View<P extends Presenter> {}
interface Presenter<V extends View> {}
interface BaseView<P extends Presenter> extends View<P> {}

class BaseActivity<P extends Presenter> extends AppCompatActivity implements BaseView<P> {}

最初有两个类,我有来自IDE的错误

interface Presenter<V : View<*>> {}
interface View<P : Presenter<*>> {}

我的错误是

*this type parameter violates the finite bound restriction*

Java代码没有任何问题

1 个答案:

答案 0 :(得分:6)

我想Kotlin不允许这样做。

来自Kotlin spec

  

以下一对声明无效,因为有边   T→S和S→T,形成一个循环:

     

interface B<T : C<*>>

     

interface C<S : B<*>>

原因如下:

  

在完全展开的形式中,这个界限将是无限的。目的   此规则的目的是避免这种无限类型和类型检查   与他们相关的困难。

在您的情况下,它是V - &gt; P和P - &gt; V形成一个循环。