我试图了解以下内容,以及为什么会这样:
我有一堂课:
public abstract class ProducerType<T extends BulkItem> extends SomeClass<T> {
public ObservableSet<ProductType> getProductTypes() {
return productTypes;
}
}
在另一个类中,我有一个方法:
private void buildChildActivities(ProducerType<?> type) {
type.getProductTypes().forEach((ProductType pt) -> {
// do stuff
});
}
我最初是缺少此方法<?>
的ProducerType
参数,因此它是:
private void buildChildActivities(ProducerType type) {
这导致在laEmbda消费者中丢失了forEach中返回的成员类型。该<T>
通用已定义的方法,没有效果ProducerType
或将其设置返回,所以我不知道为什么它会失败,且不通配符呢?
使用泛型时,您可以通过不提供类型参数来选择退出。这就是原始类型。
现在的线索是:通过在方法签名中选择泛型世界,该方法完全使用原始类型。这意味着该方法type.getProductTypes()
现在ObservableSet
在您的buildChildActivities
方法内部返回原始值。现在,此set类型显然不包含任何类型信息,因此编译器必须采用Object
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句