Java泛型的学习笔记[1]—基础知识
来源:互联网 发布:汽车之家java笔试题 编辑:程序博客网 时间:2024/06/16 12:04
Java语言引入泛型的好处:1)最大程度的保证了类型安全;2)简化编译
我们以ArrayList类为例:
1)如果没有泛型,我们要不然需要为每一种类型X编写一个XArrayList类;要不然在ArrayList中用Object的对象来存储数据,然后每次取出对象时使用类型转换;
2)而我们使用了泛型方式来定义ArrayList:public class ArrayList<T>{} ,既保证了每次使用ArrayList时的类型安全,又简化了实现ArrayList的编程工作。
好了,下面我们还是先抛出泛型类的概念和特性:
基础概念:
泛型类实际就是一个带参数的类。泛型类定义可以有多个泛型参数,中间用逗号隔开。泛型的概念也存在于C++和C#语言中。如同如下代码:
public class MyList<T> {private List<T> list=new ArrayList<T>();public T get(int index){return list.get(index);}//此处省略了若干内容....}
受限制的泛型类定义:
假设我们定义了以下三个类:
现在我就想专门针对上述三个类编写一个List类,则如下代码如示:
public class MyList<T extends Animal> {private List<T> list=new ArrayList<T>();public T get(int index){return list.get(index);}//此处省略了若干内容....}
如此的话,就可以将MyList的类参数的使用限制在Animal及其子类了。如果违反这个规则,编译期就会报错的。这样,就很大程度上保证了类型安全。
MyList<Object> list=null;//编译出错
通配符泛型:
有时在使用泛型类时,遇到不太确定参数的类型,可以用?代替。尤其是在做Java反射时:
Class<?> clazz=Class.forName(className);
受限制的通配符类型:但有时,你虽然不能确定类参数的具体类型,但是你能确定它大概的类型,比如该参数类型是Animal或者是其子类。
此时可以这样用:Class<? extends Animal> clazz=Class.forName(className);
需要注意的是:通配符不仅可以向下限制[通配符代表某类型或某类型的子类],还可以向上限制[通配符代表某类型或是某类型的父类]
比如:Class<? super Cat> clazz=Class.forName(className);//表示?代表的是Cat或Cat的基类Animal
当然,还有一些其它的例子来描述通配符:
比如定义一个变量:List<? extends Animal> animals=new ArrayList<Cat>();
本人写作功底不行,请见谅。
下一文:关于泛型的实际使用及使用中遇到的问题
- Java泛型的学习笔记[1]—基础知识
- java基础知识学习笔记1
- java学习笔记1-基础知识
- JAVA学习笔记(基础知识)
- 【Java 学习笔记】基础知识
- JAVA学习,基础知识笔记
- java学习笔记,1,java语言基础知识
- java学习:泛型的基础知识
- 2.JAVA后端学习笔记——基础知识1
- java学习笔记——基础知识
- java学习笔记01——基础知识
- 学习笔记-基础知识1-java编程概述
- java学习笔记(1)-基础知识记录
- Java学习笔记:Java基础知识
- java基础知识学习笔记2
- Java学习笔记:基础知识2
- Java学习笔记_001_基础知识
- 黑马学习笔记--JAVA基础知识
- DataPager
- 用预处理指令#define声明一个常数,用以表明一年中有多少秒
- Java Web方向的具体学习规划
- hdu2617 Happy 2009
- Junit4 testSuit 的一种写法
- Java泛型的学习笔记[1]—基础知识
- 基本数据结构/算法题总结
- js去掉数组重复的扩展方法
- SQL注入攻击和防范
- 暗时间_读书笔记(1)
- java泛型的学习笔记[2]—实际使用
- 同步容器,复合操作客户端加锁
- android service基础知识详解
- SQL SERVER函数——表值函数的处理