2012-08-07 70 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和第一個示例中的?都具有相同的上限,因此不會在此輸入等式。

相關問題