java - 在列表元素中保留泛型

标签 java generics java-7 generic-list

我有一个类,它依赖泛型在内部绑定(bind)类型。

class C<T1, T2 extends T1> {
    T1 e1;
    T2 e2;
    /* stuff */
}

在我的代码中我知道,而 c.e1c.e2可能没有同一个类,c.e2c.e1 类的子类的实例.

我需要创建一个List其中c s,并且这些元素不会共享公共(public)基类。尽管如此,我还是想保留 List 的每个元素属性之间有界限。

理想情况下,我想创建一个 List<C<?, ? extends ...>> “但是”我不知道任何语法来指定此行为。 并使用 List<C<?, ?>>在我看来,我丢失了泛型类型。

进行此收集的正确方法是什么?

最佳答案

T2C 声明的限制,您将始终保留它是 T1 的子类型这一事实即使您使用通配符。即它是 C 的特征第二个类型参数扩展了第一个类型参数。

所以你可以使用List<C<?, ?>> .

当您尝试将泛型参数绑定(bind)到类型变量时,您已经可以看到这是有效的。例如:

public static <T1, T2> void m(List<C<T1, T2>> list) { ... }
                                         ^^-- Bound mismatch

您需要使用:

public static <T1, T2 extends T1> void m(List<C<T1, T2>> list) {...}

或者:

public static <T1> void m(List<C<T1, ? extends T1>> list) {...}

让编译器高兴。

关于java - 在列表元素中保留泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460389/

相关文章:

java - Spring不在构造函数中使用 boolean 值创建bean

java - 如何诊断 Windows Vista 中的 Java JNI EXCEPTION_ACCESS_VIOLATION 错误

java - 如何从变量设置 jspinner 最大值?

java - Java 中的枚举和泛型

java - 从 jdk 1.7 降级到 1.6 会停止我的 eclipse indigo 工作

java - 无符号 16 位和 64 位整数

java - 使用单节点配置运行 Hadoop

swift - 将类型从类型数组传递到泛型方法

delphi - 我对匿名方法类型使用什么通用约束?

java - Java 中的闭包将如何替换/增强接口(interface)?