jdk1.5
好处:
1、将运行时的异常提前至编译时
2、避免了无谓的强转
常见应用:
ArrayListlist = new ArrayList (); // 里面存储的是String类型的数据类型
注意:泛型无多态,左右两边必须一致(推荐),或者只写一边(为向上兼容)
自定义泛型:一个数据类型的占位符或者一个数据类型的变量
1、泛型方法 :
参数化类型,将类型由原来的具体类型参数化,类型也定义为参数形式(类型形参),在使用时传入具体的类型(类型形参)
修饰符返回值类型 函数名(T t){......}; // public void get(T t){}
在泛型中不能使用基本类型,要使用则用其对应的包装类
方法泛型注意:
1、方法上自定义泛型,这个自定义泛型的具体数据类型是在调用该方法时传入实参时确定的
2、用T或者E表示
2、泛型类
class 类名{}
注意:
1、类自定义泛型的具体数据类型是在使用该类的时候创建对象的时候确定的
2、使用该类是没有指定泛型的具体类型,默认为Object类型
3、在类上自定义泛型不能作用于静态方法,如果静态方法需要使用自定义类型,需要自己在方法上声明使用(原因1)
3、泛型接口
interface 接口名{}
注意:
1、接口上自定义的泛型的具体数据类型是在实现一个接口时指定的
2、实现接口时没有指定具体的数据类型,默认是Object
要想延长接口自定义泛型的具体数据类型到创建实现接口实现类对象时才指定
public class Demoimplements Dao {}
4、泛型的上下限
public static void print(Collection c) // ? super Integer 只能存储Integer或者Integer的父类元素,泛型的下限;extends是上限