5、泛型

jdk1.5
好处:
     1、将运行时的异常提前至编译时
     2、避免了无谓的强转
 
常见应用:
ArrayList<String> list = new ArrayList<String>();  // 里面存储的是String类型的数据类型

注意:泛型无多态,左右两边必须一致(推荐),或者只写一边(为向上兼容)

自定义泛型:一个数据类型的占位符或者一个数据类型的变量

1、泛型方法 :

参数化类型,将类型由原来的具体类型参数化,类型也定义为参数形式(类型形参),在使用时传入具体的类型(类型形参)

 修饰符   <T>返回值类型 函数名(T t){......};    //  public  <T>void get(T t){}

在泛型中不能使用基本类型,要使用则用其对应的包装类

方法泛型注意:
     1、方法上自定义泛型,这个自定义泛型的具体数据类型是在调用该方法时传入实参时确定的
     2、用T或者E表示

2、泛型类

class  类名<T> {
}
注意:
     1、类自定义泛型的具体数据类型是在使用该类的时候创建对象的时候确定的
     2、使用该类是没有指定泛型的具体类型,默认为Object类型
     3、在类上自定义泛型不能作用于静态方法,如果静态方法需要使用自定义类型,需要自己在方法上声明使用(原因1)
 

3、泛型接口

interface  接口名<T>{
}
注意:
     1、接口上自定义的泛型的具体数据类型是在实现一个接口时指定的
     2、实现接口时没有指定具体的数据类型,默认是Object
 
要想延长接口自定义泛型的具体数据类型到创建实现接口实现类对象时才指定
public class Demo<T> implements Dao<T>{
}

4、泛型的上下限

public static void print(Collection<? super Integer> c)   // ? super Integer 只能存储Integer或者Integer的父类元素,泛型的下限;extends是上限
有志者,事竟成,破釜沉舟,百二秦关终属楚;苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
原文地址:https://www.cnblogs.com/1989guojie/p/6107686.html