黑马程序员——泛型
来源:互联网 发布:mac版 photos 编辑:程序博客网 时间:2024/06/06 04:00
------- android培训、java培训、期待与您交流! ----------
泛型是JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
泛型格式:通过<>来定义要操作的引用数据类型。其实<> 就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题。
2.避免了强制转换麻烦。
例
class GenericDemo {public static void main(String[] args) {//使该ArrayList中只能存入StringArrayList<String> al = new ArrayList<String>();al.add("a5o01");al.add("ry9u1");al.add("abcrt4");//不用泛型下一句就能存入ArrayList,在迭代器中强转成String就会出错//al.add(4);相当于al.add(new Integer(4))有个自动装箱动作//迭代器也要记得加上泛型,这样用迭代器操作元素时就不用强转Iterator<String> it = al.iterator();while(it.hasNext()){String s = it.next();System.out.println(s+":"+s.length());}}}
泛型类
当类中要操作的引用数据类型不确定的时候使用
P.S.就相当于工具类操作不同的类,这个工具类就要有扩展性,传啥操作啥,早期定义Object来完成扩展,现在定义泛型来完成。
class Cat{}class Dog{}class Utils<A>//泛型类,传啥操作啥{private A q;public void setObject(A q){this.q = q;}public A getObject(){return q;}}class GenericDemo{public static void main(String[] args) {Utils<Cat> u = new Utils<Cat>();u.setObject(new Cat());Cat c = u.getObject();;/*u.setObject(new Dog());Dog d = u.getObject();//这就不行,工具类对象在建立时明确了操作的是Cat*/}}
泛型类定义的泛型,在整个类中都有效。如果作为参数被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
方法若要操作其他类型,只能再创建操作其他类型的泛型类对象。
这时为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上(泛型方法)。
public <T> void print(T t)
{
System.out.println("print:"+t);
}
只在方法中有效,传啥操作啥;
注意:泛型方法的泛型放在返回值类型前面;
静态方法不可以访问类上定义的泛型;
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
泛型也可定义在接口上
泛型限定
<? >通配符。不确定类型;也可以理解为占位符。
<? extends E>: 可以接收E类型或者E的子类型。上限。
<? super E>: 可以接收E类型或者E的父类型。下限
使用泛型限定后操作更为灵活~
0 0
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- HDUOJ 最简单计算器
- PHP无限级分类实现(递归+非递归)
- 动态规划算法
- HDU5339 就是杭电bestcoder49第一题
- 自底向上归并排序
- 黑马程序员——泛型
- spring当中的分布式事务
- MyEclipse10.7+Maven项目junit单元测试报找不到类异常,附正常编译后的输出设置
- C语言深度解剖——读书笔记-4、符号
- Html 语法学习笔记三
- Android 菜单——上下文菜单、选择菜单以及子菜单
- uva 1589Xiangqi
- 快速排序
- Hibernate学习(1)简介