标签:数据类型 泛型类 实例化 函数 哪些 作用 类型转换 大量 except
在泛型出现之前, 代码中会有很多需要强制转换的地方. 比如 int a = (int) object, 对于这样类似的代码, 编译器在编译期间无法确定是否是正确的代码, 只有在真正运行代码期间才会校验出来是否正确. 这种强制转换实际上是让编译器去相信你的代码. 并且你需要撰写大量的文档或者注释去解释你的代码.还有的时候你在写代码的时候, 会遇到两个代码块极其的相似, 只是参数类型上有所区别. 一个是对int类型进行操作, 一个是对string类型进行操作. 但是你不得不写两份, 或者你写出了一个公共的object去处理. 但是在使用object的功能时候, 又同样会遇到很多装箱拆箱, 也可能会遇到各种执行时ClassCastException的异常.
1 public class Stack 2 { 3 4 private object[] m_item; 5 6 public object Pop() {...} 7 8 public void Push(object item) {...} 9 10 public Stack(int i) 11 { 12 13 this.m_item = new[i]; 14 15 } 16 }
泛型的出现就是为了解决上述情况. 让编译器在编译期间就能够发现这种错误, 从而在执行期间减少检查还有很多的装箱和拆箱的处理, 来达到一个提升程序性能的一个目的.
1 public class Stack<T> 2 { 3 private T[] m_item; 4 5 public T Pop(){...} 6 7 public void Push(T item){...} 8 9 public Stack(int i){ 10 11 this.m_item = new T[i]; 12 13 } 14 }
Stack<int> a = new Stack<int>(100); a.Push(10); a.Push("8888");//这行编译不通过,因为类a只接收int类型的数据 int x = a.Pop(); Stack<String> b = new Stack<String>(100); b.Push(10);//这行编译不通过,因为类b只接收String类型的数据 String y = b.Pop();
所以泛型的优势在于:
1.它是类型安全的。实例化了int类型的栈,就不能处理String类型的数据,其他的数据类型也一样。
2.无需装箱和拆箱。这个类在实例化时,按照所传入的数据类型生成本地代码,本地代码数据类型已确定,所以无需装箱和拆箱。
3.无需类型转换。
用这些约束可以限制T是哪些.
1. 值约束 T:struct
2. 引用约束 T:Class
3. 构造函数约束 T: new()
4. 转换类型约束
5. 组合约束
标签:数据类型 泛型类 实例化 函数 哪些 作用 类型转换 大量 except
原文地址:https://www.cnblogs.com/it-dennis/p/9151862.html