5

我正在尝试阅读和理解一些 Java 代码。这里是:

protected LoadTarget<? super PopulationLoadContext> createTarget(PopulationLoadContext context) {
    return createTransactionalTargetGroup(RiskScoresTables.All_Tables);
}

是什么<? super PopulationLoadContext>意思?

4

3 回答 3

8

在 Java 中,这是泛型中的下界通配符,代表PopulationLoadContext该类的任何超类。

它可以是 a LoadTarget<PopulationLoadContext>,也可以是 a LoadTarget<Object>,或者介于两者之间的任何东西(如果存在类之间的话)。

于 2013-07-24T22:31:50.703 回答
1

它是什么?

正如 rgettman 所说,它是一个泛型类型LoadTarget,其类型参数设置为下界通配符。

它允许什么?

在运行时,可以用类型参数所在的相同类型的值或祖先LoadTarget来替换(设置​​)变量。PopulationLoadContext

为什么?

为了允许灵活性 - 一系列不同的实例化类型可以相互替换并且工作正常。在LoadTarget中,类型参数用于方法参数(输入)或内部实例化泛型类型的类型上限。在这些情况下,更广泛的类型可以替代原始类型,因为它更容易适应。泛型类型据说与它的类型参数有逆变性

于 2013-07-24T22:50:09.193 回答
1

更一般地说(不仅仅是 Java),如果你想获得更大的图景,它也被称为协方差/逆变http ://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29见 Java 部分:

“给定 a List<? extends Foo>,则可以检索元素并将其安全地分配给Foo类型(协变)。给定 a List<? super Foo>,则Foo可以安全地将对象添加为元素(逆变)。”

于 2013-07-24T23:13:52.987 回答