Java在类中交叉泛型

ovn*_*nia 2 java generics

我有两个相互泛化的课程.但是当他们聚在一起时,他们的参数化存在问题.这是课程:

public abstract class AView<T extends IController> {
    protected T controller;
}

public abstract class AController<T extends AView> implements IController {
    protected T view;
}
Run Code Online (Sandbox Code Playgroud)

在这里,AController应该被参数化为<T extends AView<AController<T>>>(但它看起来太过重了?)这里是参数化示例:

public abstract class AWindowView<T extends AController> extends AView<T> {}
Run Code Online (Sandbox Code Playgroud)

这里的AController应该参数化,但是如何?而且,它会非常超载.也不建议使用通配符.

这段代码的原因是在他们孩子的彼此的课程中有一个参考.我以前的版本在控制器视图中只有一个引用,并且该实现只有一个简单的泛型.但现在我不知道如何解决这个问题.

new*_*cct 5

最常见的方法是让视图和控制器都有两个类型参数,一个用于视图,另一个用于控制器.这样,每件事都可以引用自己和另一件事.

public abstract class AView<V extends AView<V, C>,
                            C extends AController<V, C>> {
    protected C controller;
}

public abstract class AController<V extends AView<V, C>,
                                  C extends AController<V, C>>
        implements IController {
    protected V view;
}
Run Code Online (Sandbox Code Playgroud)