泛型的介绍
泛型:JDK 1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制
例子:ArrayList al = new ArrayList( );
好处:①将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序猿解决问题。让运行时期问题减少、安全
②避免了强制转换麻烦(在1.5之前的迭代器Iterator获取下一个元素的时候不用再进行类型的转换)
泛型格式:通过<>来定义要操作的引用数据类型
在使用java提供的对象时,什么时候使用泛型???通常在集合框架中很常见,只要见到< >就要定义泛型
其实< >就是用来接收类型的,当使用集合时,将集合中要存储的数据类型作为参数传递到< >中即可
什么时候定义泛型类??????
当要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在定义泛型来扩展
①泛型可以定义在类上
当泛型定义在类上时,在该类中的方法则只能接受此种泛型的数据类型。
定义一个工具类,供多个类型对象的使用
class Tools<QQ>{ //此处的泛型中的QQ是传入的对象类型
private QQ q ;
public void setObject(QQ q){
this.q = q ;
}
public QQ getObject( ){
return q ;
}
}
②泛型除了可以定义在类上,泛型还可以定义在方法上
在方法上通过<>声明其是泛型方法,根据传入的数据类型动态的确定泛型的类型,并且此数据的类型确定的泛型只在本方法有效,当传入下一个不同类型的数据时,其泛型又改变为跟后一个数据类型相同的泛型类型。
例子:
public class FanXingFangFa {
public static void main(String[] args) {
Demo d = new Demo();
d.show("haha");
d.show(45);
d.print("嘿嘿");
d.print(new Integer(13));
}
}
class Demo{
public <T> void show(T t){ //此处的<T>指此方法接受的泛型,只在本方法内有效
System.out.println("show:" + t);
}
public <Q> void print(Q q){ //此处的<Q>指此方法接受的泛型,只在本方法内有效
System.out.println("print:" + q);
}
}
打印结果如下:
③在类上定义泛型,然后在这个类中的部分方法上可以定义其他的泛型,没有定义泛型的方法则默认接受的数据类型是类定义的泛型类型,而定义了自己泛型的方法则可以根据每次调用该方法时传入的不同数据类型去确定方法的泛型
特殊之处:存在于定义了泛型的类中的静态方法不可以访问类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上
注意:泛型定义在方法上的时候将泛型 “<>” 放在方法返回值的前面,放在修饰符的后面
public static void method(W w){ }
public static void printColl(ArrayList