1. 泛型

泛型是JDK5中引入的特性,它把运行期间的问题提前到了编译期间,避免了强制类型转换

2. 泛型格式

<类型> 按照变量规则书写即可 如: <E> <T>

<类型1,类型2...> 多个泛型格式,多个泛型之间用逗号隔开 如:<E,T,Q>

如果该泛型未接收到指定类型,则默认为object类型

3. 泛型可以使用在

  1. 类后面 泛型类

    1. public static class f<e> {
    2. int a;
    3. }
    4. public static void main(String[] args) {
    5. f<Integer> fa = new f<>(); // 在类后面加上<> 指定泛型 new出来的类只能使用指定类型对象,否则会出现编译时问题(泛型把运行时问题提前到编译时)
    6. }
  1. 方法申明上 泛型方法
    方法定义一个泛型 在返回值前面加上泛型
    1. public <E> e getA(e E) {
    2. return E;
    3. }
  1. 接口后面 泛型接口
    在接口名后面定义泛型
    1. public interface in<e>{
    2. e show(e E);
    3. }


类实现

  1. // 实现类不给指定类型 此类也需要成为泛型类
  2. public class fa1<e> implements in<e>{
  3. @Override
  4. public e show(e E) {
  5. return null;
  6. }
  7. }
  8. // 实现类给予指定数据类型
  9. public class fa2 implements in<Integer>{
  10. @Override
  11. public Integer show(Integer E) {
  12. return null;
  13. }
  14. }

4. 使用泛型方法

  1. public static void main(String[] args) {
  2. ArrayList<String> list =new ArrayList<>();
  3. list.add("对对对");
  4. list.add("对对对2");
  5. list.add("对对对3");
  6. String[] strings = list.toArray(list.toArray(new String[0])); // 需要传一个泛型指定的类型对象
  7. System.out.println(Arrays.toString(strings));
  8. }

5. 类型通配符

<?> 可以匹配任何类型

ArrayList<?>:可以匹配任何类型,但是ArrayList不能添加元素,获取出来的也是父类类型

  1. public static void method1(ArrayList<?> list){}

5.1. 类型通配符上限

<? extends 类型>

ArrayList<? extends Number>:表示它的类型是Number或其他子类

  1. public static void method2(ArrayList<? extends Number> list){}

5.2. 类型通配符下限

<? super 类型>

ArrayList<? super Number>:表示它的类型是Nuber或Number父类

  1. public static void method3(ArrayList<? super Number> list){}

25. 泛型 - 图1