2012-08-07 44 views
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具有相同的上限。究竟是什么错误?

回答

3

T延伸ImportedGroupTxtContact。所以它可以是ImportedGroupTxtContact的任何子类。我们用Fruit代替它。苹果延长水果。但你不能做

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

事实上,Basket<Apple>只接受苹果,而Basket<Fruit>接受任何一种水果。

2

您正在将ParseResult<A, B>指定为ParseResult<T, ?>,其中T可能等于或可能不等于A,因此这必须失败。更确切地说,T可以是A的任何子类型。 T和第一个示例中的?都具有相同的上限,因此不会在此输入等式。

相关问题