泛型是什麼?

2021-09-05 12:37:14 字數 1414 閱讀 5970

**:

泛型用乙個通用的資料型別t來代替object,在類例項化時指定t的型別,執行時(runtime)自動編譯為本地**,執行效率和**質量都有很大提高,並且保證資料型別安全。

如果不使用泛型,可能出現的問題

如果傳的int型別引數,要寫乙個方法。如果傳string型別引數,還要寫乙個方法。

public class stack

public void push(int item)

public stack(int i)

}

如果直接把引數型別寫成object,處理值型別時,會出現裝箱、拆箱操作,但將用到的資料型別的強制轉換操作,會增加處理器的負擔。如果在內部有不同型別的轉換,會在執行時出現型別轉換異常。

public class stack

public void push(object item)

public stack(int i)

}在資料型別的強制轉換上還有更嚴重的問題(假設stack是stack的乙個例項):

node1 x = new node1();

stack.push(x);

node2 y = (node2)stack.pop();

針對object型別棧的問題,我們引入泛型,他可以優雅地解決這些問題。

用乙個通用的資料型別t來作為乙個佔位符,等待在例項化時用乙個實際的型別來代替。

例:

public class stack

public void push(t item)

public stack(int i)

}類的寫法不變,只是引入了通用資料型別t就可以適用於任何資料型別,並且型別安全的。這個類的呼叫方法:

//例項化只能儲存int型別的類

stacka = new stack(100);

a.push(10);

a.push("8888");//這行編譯不通過,因為類a只接收int型別的資料

int x = a.pop();

stackb = new stack(100);

b.push(10);//這行編譯不通過,因為類b只接收string型別的資料

string y = b.pop();

這個類和object實現的類有截然不同的區別:

1.它是型別安全的。例項化了int型別的棧,就不能處理string型別的資料,其他的資料型別也一樣。

2.無需裝箱和拆箱。這個類在例項化時,按照所傳入的資料型別生成本地**,本地**資料型別已確定,所以無需裝箱和拆箱。

3.無需型別轉換。

泛型是什麼

類似c 的模板template c 的泛型是在例項的方法被呼叫時檢查過載是否產生混淆,而不是在泛型類本身編譯時檢查。同時還得出乙個重要原則 當一般方法與泛型方法具有相同的簽名時,會覆蓋泛型方法。泛型中的靜態成員變數 在c 1.x中,我們知道類的靜態成員變數在不同的類例項間是共享的,並且他是通過類名訪...

C 泛型是什麼

泛型聽起來很高深的乙個詞,但實際上它的作用很簡單,就是提高c 程式的效能。比如在計算機中經常用到一些資料結構,如佇列,鍊錶等,而其中的元素以前一般這麼定義 object a new object 這樣就帶來乙個嚴重的問題,用object來表示元素沒有邏輯問題,但每次拆箱 封箱就占用了大量的計算機資源...

泛型簡析 一 泛型是什麼?

泛型,即 不確定的引數型別 使 可應用於多種不同的型別,而不再是僅限於一種確定的型別。泛型使我們可以通過引數確定類要使用的型別。泛型類泛型類的定義需要將型別引數列表放在類名的後面 class classname 例 public class test public void sett t t pub...