Kotlin中的泛型扩展

wal*_*mar 1 generics mvp android extends kotlin

我试图将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> {}
Run Code Online (Sandbox Code Playgroud)

在前两个类我有IDE的错误

interface Presenter<V : View<*>> {}
interface View<P : Presenter<*>> {}
Run Code Online (Sandbox Code Playgroud)

我的错误是

*this type parameter violates the finite bound restriction*
Run Code Online (Sandbox Code Playgroud)

Java代码没有任何问题

Bob*_*Bob 6

我想Kotlin不允许这样做.

来自Kotlin规范:

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

interface B<T : C<*>>

interface C<S : B<*>>

原因如下:

在其完全展开的形式中,这种界限将是无限的.此规则的目的是避免这种无限类型,并键入与它们相关的检查困难.

在你的情况下,它是V - > P和P - > V形成一个循环.