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