【泛型——这才真正的理解你】

来源:互联网 发布:java多线程编程实例 编辑:程序博客网 时间:2024/06/11 17:00

前言:

曾记得那是机房重构,曾记得那是刚刚听说有泛型这个东西,曾记得自己实现了datatable转泛型的实例,而面对泛型,只知道它像一个集合一样,存储着信息。然而,今天对于泛型的认识,让我认识到了什么才是学习?每个阶段该如何去学习?这篇博客,小编主要带大家来理解什么是泛型以及泛型的优缺点。

核心:

一、定义

泛型是具有占位符(类型参数)的类、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。
这个定义,可能不好理解。


首先我们从它的英文出发:泛型的英语:generic,即通用的意思,用日常生活的例子来理解就是一个模子。什么是模子呢?比如:桶,桶可以用来装水,牛奶,豆浆等等,因此它们会有桶的形状,及桶的特征,我们的这个泛型,就是这样,泛型就是一个模板类型,实现的时候可以把int,string等类型放入泛型中,如List<int>的实例就可以用List<T>泛型中定义的所有方法。


应用泛型,可把泛型比作一个黑盒子,我们不考虑盒子具体里面是什么类型,我们关注的是对盒子的处理, 此时我们不针对具体对象编程,给了一个类型,把它应用到泛型,就具有了泛型的特性。

二、泛型声明

引入:System.Collections.Generic 命名空间

List<T>的基本用法:

1.创建一个普通的泛型集合类

List<T>mylist=new List<T>();

T为列表元素的类型:

List<string> mylist = new List<string>();

2.添加列表中的元素

List.Add(T item)

基本的泛型,我们在机房重构的时候接触过:请看之前的总结博客:点击打开链接


三、为什么要引入泛型呢?下面来看它的优点:

•类型安全

为什么用了泛型就类型安全了呢!使用泛型可以使泛型知道变量的类型限制,进而可以在更高程度上验证类型假设,假设没有泛型,类型安全主要由程序员来把握

•代码重用

代码重用,举个例子吧!现在有一个需求,需要比较两个整型数的大小,需要一个方法。假如又需要比较两个字符串的大小,是不还需要一个方法呢,如果再来个比较小数的大小呢?如果用泛型的话,一个方法就OK了,因为需求中只是比较的类型不同,实现方式是完全一样的,这时可以利用泛型把任何类型当做参数传入到这个类型中去实例化为具体类型的比较。减少了代码量,以后有这样的需求的话直接用这个方法就好了!

•高性能

这个可以做一个具体的实例,使用泛型的速度比非泛型运行的时间短。
泛型不必对元素进行装箱,那么什么是装箱呢?所谓装箱,就是把值类型打包到Object引用类型的一个实例;

int i = 123;object o =(object) i ; //boxing

•消除强制类型转换

泛型不必装箱,用一个通过的数据类型T来代替object,在类实例化时指定T的类型,运行时(Runtime)自动编译为本地代码,运行效率和代码质量都有很大提高,并且保证数据类型安全。

通过强类型支持+泛型参数约束,决定了在编译时就可找到不符合参数类型要求的地方,从而保证了编译时的类型安全,避免了运行时的类型转换错误。


总结

学习的道路永远没有终止,泛型的知识点还有很多很多,期待自己去学习和挖掘!

1 0
原创粉丝点击