泛型程序设计
September 20, 2016 9:56 PM Powerd By DeiMo
泛型概述
什么是泛型
泛型技术是在JDK1.5之后推出的一种安全机制,它是给编译器使用的技术,用于编译时期。确保了类型安全。
泛型的好处
1.将运行时期的问题ClassCastException转到了编译时期
2.避免了强制转换的麻烦什么时候使用泛型
1.当操作的引用数据类型不确定的时候。就可以使用泛型<>。将要操作的引用数据类型出入即可、其实“<>”就是一个用于接收具体引用数据类型的参数范围。
2.在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。
泛型的擦除与补偿
泛型的擦除
程序运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。进行泛型的擦除是为了兼容运行低版本的虚拟机中的类加载器。
泛型的补偿
在运行时,通过获取元素的类型进行自动转换动作、而不需要程序员手动使用强制类型转换。
泛型的限定
- 泛型的通配符
? —>接收全部类型 泛型的上限
?extends E —>接收E类型或者E的子类型对象。上限!一般用于存储对象,如集合框架的添加元素方法:addAll(Collection<? extends E> e)
- 泛型的下限
?super E —>接收E类型或者E类型的父类型对象。下限~。一般用于取出对象,如比较器(Compartor)
泛型的高级应用
泛型除了可以提高类型安全,还可以用于面向对象的系统设计
泛型类
自定义泛型类
public class GenericTool<Q extends Person> {
private Q q;
public void setObject(Q q) {
this.q = q;
}
public void show(){
System.out.println(q.toString());
}
}
驱动函数
public class GenericClassDemo {
public static void main(String[] args) {
GenericTool<Person> tool = new GenericTool<Person>();
// tool.setObject(new Person("liuchong", 23));
// tool.setObject(new Worker("haha", 52));
tool.setObject(new Student("xixi", 26));
tool.show();
}
}
泛型方法
定义方式:
在修饰符之后,方法名之前添加泛型参数
自定义泛型方法的使用
public static <T extends Person> void show(T t){
ArrayList<T> query = t.query(t);
for(Iterator<T> iterator = query.iterator();iterator.hasNext();){
T next = iterator.next();
System.out.println(next.toString());
}
}
泛型接口
interface InterDemo<T>{
void show(T t);
}