从学习C#的时候就开始接触泛型,直到学习JAVA后对泛型的理解依然只停留在表面。最开始接触泛型时,是为了方便类型转换和保证类型安全,至于泛型的原理则了解的很少
最初对泛型的概念是“指定具体类型”,但这种认识好像与“泛”的意思正好相反,“泛”的意思应该是“抽象”或者“模板”等等。
这次在做一个DRP的项目时,凡涉及到Collection的地方都使用了泛型,而且接触到了泛型类。于是决定深入了解一下泛型。
先来看下java.util.List接口的声明
public interface List<E> extends Collection<E> {
int size();
.....
boolean add(E e);
E get(int index);
.........
}
我们会发现它用E来代替具体的类型,这样就实现了将类型参数化,具体E代表什么类型,由使用时决定
List<Integer> list;
在这里E具体就是Integer
于是我们发现了其实泛型设计就是将类型进行抽象,提炼出一个模板,这个模板可以接受任何类型的实例化,大框架是给定了,具体的类型由具体使用时指定,这样就增加了编程的灵活性。
例如一个Math类有一个比较两个数是否相等的函数IsEqual()
如果不使用泛型,需要写多个重载
public class Math{
//比较整型变量
public boolean IsEqual(int first,int second);{
boolean flag;
if(first==second){
flag=true;
}else{
flag=false;
}
return flag;
}
//比较单精度变量
public boolean IsEqual(float first,float second);{
boolean flag;
if(first==second){
flag=true;
}else{
flag=false;
}
}
//.....比较其他类型的数值变量
}
但是如果使用泛型,那就好办了,只需写一个函数
public class Math<T>{
public boolean IsEqual(T first,Tsecond);{
boolean flag;
if(first==second){
flag=true;
}else{
flag=false;
}
return flag;
}
}
具体使用时,这样写即可
Math<Integer> math=new Math<Integer>();
boolean result=math.IsEqual(5,6);
使用时指定具体类型
学过C++的同学知道,C++中有模板类和模板方法,其实他们也是对泛型的一种实现
于是我们可以得出下面的结论:
通过泛型提炼出模板
具体类型由使用时决定
通过指定具体类型可以限定类型的范围,从而将错误的检查提前到编译期间
指定了具体类型也就去除了转型的繁琐和失误
这是我对泛型的一点小认识。
分享到:
相关推荐
泛型并不是什么新鲜的东西,他在功能上类似于C++的模板,模板多年前就已存在C++上了,并且在C++上有大量成熟应用。 本文讨论泛型使用的一般问题,比如为什么要使用泛型、泛型的编写方法、泛型中数据类型的约束、...
编一个模板和容器类,采用的是泛型编程的思想
如果项目中有很多个单例,那么我们就必须每次都写这些代码,有什么办法可以省去这些不必要的代码呢? 那就是面向对象最重要的思想:继承。用这个单例模板类直接继承即可
本书针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方法介绍C++语言,引导读者以最自然的方式,将人类习惯的面向对象的思维方法运用到程序设计中。主要内容包括程序设计基础知识、类与对象的...
模板是泛型编程的一种重要思想,STL(Standard Template Library,标准模板库)是采用模板实现的一个实例 函数模板 对比函数重载(同一作用域内函数名相同,参数列表不同的函数),函数模板只需要一个函数就实现了函数...
介绍C++中的泛型编程思想,并介绍c++模板的概念,帮助你学习STL的相关知识!对泛型编程有一个初步的认识!
C++ STL 教程 涉及泛型编程思想 标准模板 迭代器 泛型算法 容器 等
华为 C++ 培训资料 经典 ...word讲解C++语言中级教材讲授C++语言的运用技术,包括:类、对象之间的关系、对象的存储与布局、运算符重载、智能指针、仿函数、泛型编程,C++模式设计基本思想。下载看吧
c++标准模板库与代码重用.pdf :文章深入剖析了泛型编程思想,探讨了STL的结构与原理。指出STL在代码重用方面具有重要意义
论述了JAVA泛型排序设计思想。通过移植C++标准模板库的partial_sort、nth_element函数算法,可方便实现java 下给定基本数据类型数组、对象数组、基本序列容器元素局部排序、求第nth元素功能,是对JAVA固有sort函数有效...
C++课程设计俄罗斯方块 程序设计中要体现面向对象特性的使用,包括类的设计、继承体系、多态性、模板的使用,体现泛型编程思想;
让更多的C++程序员了解模板元编程,并在此过程中获得快乐! 目录 * 历史 * 导入范例 * 主要思想 * 静态语言设施 * 控制结构 * 数据结构 * 数值计算 * 类型计算 * 代码生成 * 断言和契约 * 库 * DSEL设计 * 结语 * ...
CS125 程序设计-程序设计思想与方法-全套PPT ...14. ch13 泛型机制—模板(最终版).ppt 15. ch14 输入输出与文件.ppt 16. ch15 异常处理.ppt 17. ch16 容器和迭代器.ppt 18. ch17 关于计算机.ppt
这本书讲解了大量的编写模板库的技巧,其核心设计思想是基于Policy来构建模板库。并且通过运用这些模板技术(例如元编程等),实现了多个设计模式的代码框架的自动生成,书不厚,正文内容不过300页,但是书中没有...
从逻辑层次来看,在STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像需求requirements,概念concept,模型model,容器container,算法algorithmn,迭代子iterator等。与OOPobject-oriented ...
Java_Algorithm(Java算法集合) 学习算法是为了什么? 1、应对大型IT公司的算法面试题;...·【v0.03】template泛型模板函数传参,com.myself.algorithm.sort.template 相关笔记 1、为什么学习O(n^2)的排序算法? ·基
模板是C++中一种泛型编程技术,它允许程序员编写通用的代码,从而可以在不同的数据类型上重用代码。STL是C++中一个非常重要的库,它提供了许多基本数据结构和算法,如向量、列表、堆、排序等等。使用STL可以让程序员...
从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。 STL六大组件 ...
利用C#开发的一款拼图游戏,用到了简单的面向对象的思想,泛型集合...等相关知识,实现了窗体拖动,不重复随机数等小技术