2015-07-03 37 views
0
class Gen <T super Number>   // 1 // IS NOT ALLOWED 

void Demo(Gen <? super Number> ob) // 2 // IS ALLOWED // Gen is a generic class 

爲什麼在編譯時錯誤,第二個發言的第一個語句的結果正常工作上界通用類和通配符

回答

1

第一個例子是一個通用型的。第二個例子是一個參數化類型。他們是不同的東西。

  • 泛型類型是通過類型參數化的類型的定義。可以通過爲這些類型參數提供類型參數來調用它。
  • 參數化類型是具有類型參數的泛型類型的調用,無論這些類型參數是類型還是通配符。

泛型類型的類型參數的下界不能被使用。這不是,所以在Java中是「一件事」。

然而,第二個例子的意思是:「Gen<T>類型的任何參數化,其中type參數是Number的超類型」。這是有用的,因爲它允許泛型類型的polymorpyhism。

通過提供"restricted instantiation",他們實際上可能是有限的使用,但沒有被認爲是有用的足以被允許。

+0

'它是有用的,因爲它允許polymorpyhism的泛型類型',是否有任何其他使用參數化類型? –

+0

@kevingomes。通配符參數化類型都是關於多態的。 'Gen '不與'Gen '分配兼容,但是'Gen '是。用上/下界來限制這些通配符,可以限制多態集合,因爲它可以創建輸入/輸出參數。 –