0

我有这样的方法:

<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。究竟是什么问题?

4

2 回答 2

3

T延伸ImportedGroupTxtContact。所以它可以是ImportedGroupTxtContact. 让我们将其替换为Fruit. 苹果延伸水果。但你做不到

Basket<Apple> basket = new Basket<Fruit>();

事实上,aBasket<Apple>只接受苹果,而 aBasket<Fruit>接受任何种类的水果。

于 2012-08-07T11:21:28.477 回答
2

您正在将 a 分配给ParseResult<A, B>可能等于或不等于 的ParseResult<T, ?>地方,因此这一定会失败。更准确地说,可以是 的任何子类型。您的第一个示例中的和都具有相同的上限这一事实并未在此处输入等式。TATAT?

于 2012-08-07T11:19:14.093 回答