我正在尝试阅读和理解一些 Java 代码。这里是:
protected LoadTarget<? super PopulationLoadContext> createTarget(PopulationLoadContext context) {
return createTransactionalTargetGroup(RiskScoresTables.All_Tables);
}
是什么<? super PopulationLoadContext>
意思?
我正在尝试阅读和理解一些 Java 代码。这里是:
protected LoadTarget<? super PopulationLoadContext> createTarget(PopulationLoadContext context) {
return createTransactionalTargetGroup(RiskScoresTables.All_Tables);
}
是什么<? super PopulationLoadContext>
意思?
在 Java 中,这是泛型中的下界通配符,代表PopulationLoadContext
该类的任何超类。
它可以是 a LoadTarget<PopulationLoadContext>
,也可以是 a LoadTarget<Object>
,或者介于两者之间的任何东西(如果存在类之间的话)。
它是什么?
正如 rgettman 所说,它是一个泛型类型LoadTarget
,其类型参数设置为下界通配符。
它允许什么?
在运行时,可以用类型参数所在的相同类型的值或祖先LoadTarget
来替换(设置)变量。PopulationLoadContext
为什么?
为了允许灵活性 - 一系列不同的实例化类型可以相互替换并且工作正常。在LoadTarget
中,类型参数用于方法参数(输入)或内部实例化泛型类型的类型上限。在这些情况下,更广泛的类型可以替代原始类型,因为它更容易适应。泛型类型据说与它的类型参数有逆变性
更一般地说(不仅仅是 Java),如果你想获得更大的图景,它也被称为协方差/逆变:http ://en.wikipedia.org/wiki/Covariance_and_contravariance_%28computer_science%29见 Java 部分:
“给定 a List<? extends Foo>
,则可以检索元素并将其安全地分配给Foo
类型(协变)。给定 a List<? super Foo>
,则Foo
可以安全地将对象添加为元素(逆变)。”