Java 类中的泛型相互交叉

标签 java generics

我有 2 个类,彼此具有泛型。但当他们在一起开会时,他们的参数化存在问题。以下是类(class):

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

public abstract class AController<T extends AView> implements IController {
    protected T view;
}

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

public abstract class AWindowView<T extends AController> extends AView<T> {}

这里的AController应该参数化,但是怎么参数化呢?再说一遍,它会非常重载。也不建议使用通配符。

使用此代码的原因是为了在类里面对他们的 child 彼此进行引用。我之前的版本在 View 中的 Controller 中只有一个引用,并且该实现只有一个简单的泛型。但现在我不知道如何解决这个问题。

最佳答案

最通用的方法是让 View 和 Controller 都有两种类型参数,一种用于 View ,一种用于 Controller 。这样,每个事物都可以引用自身和另一个事物。

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;
}

关于Java 类中的泛型相互交叉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20855288/

相关文章:

java - 阻塞队列与信号量

generics - 显式调用 java 中的默认方法 - 当实现的接口(interface)使用泛型时

vb.net - 如何在 VB.NET 中创建通用属性?

c# - 为 generi 方法抛出的 'Common Language Runtime detected an invalid program.' 异常需要解决方法

scala - 特征的多个类型实例中的类型差异

java - 将新数据从 Java 程序发送到 Web 浏览器

java - Maven 程序集插件在 jenkins 中重新下载依赖项

java - 如何使用jsoup取消注释html标签

java - 在 Spring Security 中处理自定义异常

c# - 在运行时设置通用类型