将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
简单的来说使用范型,表示集合只能用什么类型的集合;不使用范型的集合,可以装任何东西类型进去(并有黄色警告)
package com.cdz.fanxing; import java.util.ArrayList; public class FanXing { public static void main(String[] args) { ArrayList<String> list=new ArrayList<String>(); //只能为String类型的参数 //list.add(1);//参数不行 list.add("abc"); System.out.println(list); ArrayList lis=new ArrayList(); //不使用范型,开口较大,所以可以存任何类型的 lis.add(1);//参数不行 lis.add("abc"); System.out.println(lis); } }下面两个典型泛型创建了一个Fan类
典型泛型集合ArrayList<E>
package com.cdz.fanxing; import java.util.ArrayList; public class FanXing { public static void main(String[] args) { Fan f=new Fan(); ArrayList<Fan> list1=new ArrayList<Fan>();//只能添加Fan类型,也证明了集合的作用:存储对象 list1.add(f); System.out.println(list1); } }
典型泛型集合HashMap<K,V>
package com.cdz.fanxing; import java.util.HashMap; public class FanXing { public static void main(String[] args) { HashMap<String,Fan> list2=new HashMap<String,Fan>(); list2.put("Name", f); System.out.println(list2); } }泛型接口就是拥有一个或多个类型参数的接口
package com.cdz.fanxing; public interface FanJeiKou<T> { //接口成员 //1.常量 //2.抽象方法,这里的抽象方法abstract,可以省略 public T prin(T a); }而范型接口中的类型交给实现类去实现
package com.cdz.fanxing; public class FanJeiKouImp implements FanJeiKou<String> { public String prin(String a){//重写了方法 return a; } }
泛型类就是具有一个或者多个类型参数的类
例:
public class Student<T> { public T print(T x){ //方法体 } }面向对象的特性同样适用于泛型类,所以泛型类也可以被继承
继承了泛型类的子类,必须也是泛型类
语法格式:
class 子类<T> extends 父类<T> { }
