泛型:
jdk 1.5出现的安全机制
好处:
1,将运行时期的问题ClassCastException转到了编译时期
2,避免了强制转换的麻烦
<>:什么时候用?当操作的引用数据类型不确定的时候。就使用<>。将要操作的引用数据类型传入即可。
其实<>就是用于接收具体引用数据类型的参数范围。
在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。
泛型这个技术是给编译器用的,用于编译时期。确保了类型的安全。
运行时,会将泛型去掉,生成的class文件是不带泛型的。这个称为泛型的擦除。
为什么擦除呢?因为为了兼容运行的类加载器。
泛型补偿:在运行时,通过获取元素的类型进行转换动作。不用使用者在强制转换了。
//泛型作用于类中的时候这个类就叫泛型类:
public class Tool<QQ> {
//普通方法可以直接使用类上面的泛型的参数
public void show (QQ qq){
System.out.println(qq);
}
/*
* 泛型定义在方法上的时候,调用方法的时候可以确定传入的是什么类型就操作的是什么类型。跟泛型定义在类上面的差不多一个意思。
* 定义方法泛型,泛型必须写在返回值的前面 修饰符的后面。
*/
public <w> void show2(w str){
System.out.println(str);
}
/*
* 当方法为静态时,方法中的参数不能使用类上的泛型,因为静态的方法不需要对象(泛型在创建对象的时候就要确定了)。
* 如果要使用泛型只能把泛型定义在方法上。
*/
//错误写法
public static void print(QQ q){
System.out.println(q);
}
//正确写法
public static <Y> void method(Y y){
System.out.println(y);
}
}
泛型定义在接口上的时候就叫泛型接口。
interface Iter<T>{
void show(T t);
}
实现泛型接口。
class Iterimperment implements Iter<String>{
public void show(String str){
System.out.println(str);
}
}