2012-09-23 162 views
17

This下面的鏈接狀態:參數化類型是什麼意思?

泛型類型與實際類型參數的實例化被稱爲參數化類型。 例(參數化類型):

Collection<String> coll = new LinkedList<String>();

那麼什麼是參數化類型?

  • Collection<String>
  • LinkedList<String>
+5

怎麼樣在你給的鏈接閱讀接下來的一句:「聲明集合表示參數化類型,這是通用型系列的一個實例,其中地方持有人E已被混凝土類型String取代? –

+0

@JBNizet,是的,我的混淆源於實例化類型'LinkedList '。下面的評論爲我澄清。 – wulfgarpro

回答

22

他們都是參數化類型:類型採取其他類型作爲參數。

您在表達兩邊有不同類型的事實是不相關的,並且與多態行爲有關,即因爲LinkedListCollection的子類型。

1

收集

Collection<String> 
LinkedList<String> 

的兩個用途是參數化類型在這裏與String所使用的類型。

11

參數化類型通常是一個處理其他對象而不感興趣的類是什麼類型。類型可以使用符號「名稱」來定義,然後在創建類的實例時傳遞。

例如:

class MyClass<T> { 
    private T obj; 
    public MyClass<T>(T obj) { 
     this.obj = obj; 
    } 
    public int getId() { 
     return obj.hashCode(); 
    } 
} 

在上面的例子MyClass包裹的任何類型的對象,並使用該事實,即該方法始終存在執行其方法hashCode()

下面是這個類用於:

int sid = new MyClass<String>("aaaa").hashCode();

請注意,你不能說new MyClass<String>(123):該對象與參數String創建的事實決定構造函數參數的類型。

回到你的例子Collection<String>的意思是「字符串的集合」。這意味着您不能將其他類型的對象添加到此集合中。

+0

如果你有一個其中T是字符串,那麼你可以傳遞T的所有子類,是正確的嗎? – Ungeheuer

+0

幾乎正確。除了String是final類而不能擴展的事實。 – AlexR

+0

所以基本上任何泛型都是參數化類型,對吧? –

0

ParameterizedType表示參數化類型,如Collection。

參數化類型是在反射方法首次需要時創建的,如此包中所指定的。當創建一個參數化類型p時,p實例化的泛型類型聲明被解析,並且p的所有類型參數都是遞歸創建的。有關類型變量創建過程的詳細信息,請參閱TypeVariable。重複創建參數化類型不起作用。

實現此接口的類的實例必須實現equals()方法,該方法等同於共享相同泛型類型聲明並具有相同類型參數的任何兩個實例。

4

看來泛型類型和參數化類型是同義詞。但似乎不正確的例子是Box<Integer>泛型,因爲在這個詞不通用的意義上。所以大概:

泛型類型與形式類型參數/聲明小號

class Box<T> { .. } 

Box<T>是一個通用型

的參數化類型與實際類型參數的聲明/ s的

Box<Integer> b;   

Box<Integer>是參數化類型

原始類型是不帶實際類型參數/ s的泛型類型的聲明。

class Box<T> { .. } 
Box b; 

Box是原始類型

相關問題