我有一个像这样的方法:
<T extends ImportedGroupTxtContact> Importer<T> createImporter(Class<T> classToImport)
在方法体中,这很好:
ParseResult<? extends ImportedGroupTxtContact, ?> parseResult = new ParseResult<ImportedGroupTxtContact, ChildContactField<?>>();
但事实并非如此:
ParseResult<T, ?> parseResult = new ParseResult<ImportedGroupTxtContact, ChildContactField<?>>();
这对我没有意义,因为T extends ImportedGroupTxtContact
具有与? extends ImportedGroupTxtContact
相同的上限。究竟出了什么问题?
答案 0 :(得分:3)
T
延伸ImportedGroupTxtContact
。所以它可以是ImportedGroupTxtContact
的任何子类。让我们用Fruit
替换它。 Apple扩展了Fruit。但你做不到
Basket<Apple> basket = new Basket<Fruit>();
事实上,Basket<Apple>
只接受苹果,而Basket<Fruit>
接受任何种类的水果。
答案 1 :(得分:2)
您要将ParseResult<A, B>
分配给ParseResult<T, ?>
,其中T
可能等于A
,也可能不等于T
,因此必须失败。更准确地说,A
可以是T
的任何子类型。第一个示例中的?
和{{1}}都具有相同的上限这一事实不会在此处输入等式。