Java 泛型详解
来源:互联网 发布:红蜘蛛教学软件介绍 编辑:程序博客网 时间:2024/04/27 00:10
Java 泛型详解
之前学习泛型后,当时印象很深刻,以为不会忘记,就没有做记录,结果到头来发现自己还是太年轻啊,忘得差多了。这不又花了半个小时重新捡起来,还是乖乖自己做个笔记,然后去应用它,这样才不会忘记呢。
为什么 sun 公司要设计泛型这种技术呢?
如果你学习过 Java 中的集合框架,就知道这些容器可以存放任意类型的对象,这当然是为了让程序有更好的扩展性。
那你有没有想过其内部是怎么用代码实现的呢?内部是用 object 类来声明变量类型嘛,因为它是任何对象的爸爸啊。
那么现在就涉及到向上转型和向下转型的问题,当对象装进容器后,其实实现了向上转型,也就是说他失去了自己的特性,当我们重新把它取出来时,就需要向下转型,重新让它获得自己的特性。而频繁的类型转换,势必就会出错,而这种错误偏偏又是运行时期的错误,让码农苦不堪言啊。
所以, sun 公司就设计出了泛型这种技术,sun 就和 java 编译器商量,希望它 能够堵住这个错误,在编译时期就把它揪出来,而不要放任这个错误到运行时期。抢占 Java 虚拟机的地盘啊,这就是泛型出现的原因。
如何使用已经采用了泛型技术的类呢?
这里我们以 HashMap 容器为例,体验一下,怎么用别人设计好的,已经使用了泛型技术的类,稍后再自己设计一个使用泛型技术的类工其他人使用。
@Test public void test(){ //这是程序员A 在设计容器 Map<Integer,String> map = new HashMap<Integer,String>(); map.put(1, "aaa"); map.put(2, "bbb"); map.put(3, "ccc"); //假设这是另一个程序员B 在取数据,由于A使用了泛型,B取得过程中就会得到 IDE 的提示,一旦写错, IDE 还会报错。 Set<Map.Entry<Integer, String>> set= map.entrySet(); for(Map.Entry<Integer, String> entry : set){ System.out.println(entry.getKey() + ":"+ entry.getValue()); } }
泛型技术的使用,极大的提高了程序的健壮性,减少了程序员工作可能犯的错误。
如何自己设计一个采用泛型技术的类,供他人使用呢?
设计的过程,还能发现泛型的另一个好处,就是让代码更加通用,提高了代码的复用性。
首先,先设计一个使用泛型技术的方法
//参数能够使用泛型,是因为,前面声明了泛型。这个方法很明显可以将任意类型的,相同性质的元素交换。public <T> void swap(T t1,T t2){ T temp; temp = t1; t1 = t2; t2 = temp; }
那如果一个类中有几个地方都需要使用泛型,可不可以把声明泛型提到类中,变成一个全局声明的呢?当然可以啊。
这样声明就可以了
//其实就是把声明部分放到类名前面就可以了,使用时,和上述 HashMap 是一样的。public class TestGeneric <T>{ public void swap(T t1,T t2){ T temp; temp = t1; t1 = t2; t2 = temp; }}
这里有一个使用泛型技术来实现顺序表的例子,可以参考:
http://blog.csdn.net/keqiwww/article/details/75174909
总结,泛型从设计者角度来说,可以让自己的代码更通用,给使用者提供一个减少犯错的机会。从使用者角度来说,我利用泛型 ,可以让自己少犯错嘛。
- Java泛型详解
- java泛型详解
- java泛型详解
- Java泛型详解
- Java泛型详解
- java泛型详解
- Java泛型详解
- java泛型详解
- java 泛型详解
- java 泛型详解
- Java 泛型详解
- java 泛型详解
- java 泛型详解
- java泛型详解
- java 泛型详解
- Java泛型详解
- java 泛型详解
- java 泛型详解
- hdu 1142 A Walk Through the Forest bfs+记忆化搜索
- Python 学习资源大全中文版
- znode节点创建
- BOOST 类型转换(lexical_cast)崩溃问题
- 安装Laravel
- Java 泛型详解
- 数组中指针的指针访问
- 测试
- 博客大咖收藏录
- 进程的概念、状态转换和进程控制块
- JSPel表达式详解
- 系统架构图
- HDU 3006 The Number of set (状态压缩)
- 7-16 java学习笔记