黑马程序员——泛型
来源:互联网 发布:大数据集群测试工具 编辑:程序博客网 时间:2024/06/05 06:04
泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。表明这个集合要装的数据类型是哪种类型。
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期。,方便于程序员解决问题。让运行时问题减少,安全。
2,避免了强制转换麻烦。
泛型格式:通过< >来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到< >就要定义泛型。
其实< > 就是用来接收类型的。当使用集合时,将集合中要存储的数据类型作为参数传递到< >中即可。泛型的类型参数只能是类类型(包括自定义类),不能是简单类型(如:int)
class GenericDemo {public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>(); //al.add("abc01");al.add("abc0991");al.add("abc014");//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());}}}
我们也可以自己定义泛型类。什么时候定义泛型类呢?当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在定义泛型来完成扩展。例如,我们要定义一个工具类来操作其他类型的数据,但是要操作的类型并不确定,就需要定义泛型。如下:
class Utils<QQ>{private QQ q;public void setObject(QQ q){this.q = q;}public QQ getObject(){return q;}}
泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
class Demo<T>{public void show(T t){System.out.println("show:"+t);}public <Q> void print(Q q) // <Q>用来声明泛型类,表明与类中的泛型不是同一个{System.out.println("print:"+q);}}
静态方法不可以访问类上定义的泛型。因为静态方法是随着类的导入而导入的,此时还没有确定泛型具体的操作类型。如果静态方法操作的应用数据类型不确定,可以将泛型定义在静态方法上。
public static <W> void method(W t){System.out.println("method:"+t);}
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与类型参数无关的方法,不能调用与类型参数有关的方法。
泛型的限定;
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限
泛型不考虑继承(参数化类型不考虑类型参数的继承关系),例如,以下代码是错误的:
Vector<String > v1=new Vector<Object>( );
Vector<Object > v2=new Vector<String>( );
但是泛型是一个严格依据语法来判断的,并且只停留在变异阶段,所以以下的代码是不会报错的:
Vector v1=new Vector<String>();
Vector<Object > v2=v1;
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员—泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 黑马程序员——泛型
- 我是原毛毛,今日从1ke面试归来
- codeforces 18A - Triangle
- 小公司的文化会随着公司组织的增长而增长吗?谈创业公司文化的可持续发展
- ArcGIS Server WMS地址及对应地图
- U_BOOT_CMD命令的实现
- 黑马程序员——泛型
- android中include标签的使用
- 功能完善的Java连接池调用实例
- Button的BringToFront()方法,使按钮置顶. .
- codeforces 16A - Flag
- AfxWinMain的那些事 .
- 一个女程序员的征婚信息
- SQL语句大全
- android系统安装支持php的web服务器