徐锦洪 发表于 2024-9-21 11:45:15

Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例

泛型

21.1 概述

JDK5中引入的特性,在编译阶段束缚操作的数据范例,并举行检查
泛型格式:<数据范例>
泛型只能支持引用数据范例,假如写基本数据范例必要写对应的包装类。
泛型好处:


[*]统一数据范例
[*]把运行时期的问题提到了编译期间,避免了逼迫范例转换可能出现的异常,因为编译阶段范例就能确定下来。
泛型细节:


[*] 泛型中不能写基本数据范例
因为基本数据范例不能转成Object范例,包装类才华转成Object范例
[*] 指定泛型后传递数据时,可以传入该类范例或者其子类范例
[*] 假如不写泛型,范例默认是Object
21.2 泛型类

使用场景:当一个类中,某个变量的数据范例不确定时,可以定义带有泛型的类。
格式:
修饰符 class 类名<类型>{
    ....
}

举例:
E可以理解为变量,但不是变量,不是记录数据的,是用来记录数据类型的

public class ArrayList<E>{
   //.....当创建给类对象时,E就确定类型
}
//自定义泛型类
public class MyArrayList<E>{
    Object[] obj = new Object;
    int size; // size:表示长度,即存了几个元素

    // E:表示不确定的类型
    // e:形参的名字,变量名
    // 添加元素
    public boolean add(E e){
      obj = e;
      size++;
      return true;
    }
    // 获取元素
    public E get(int index){
      return (E) obj;
    }

    // 重写toString方法
    @Override
    public String toString() {
      return Arrays.toString(obj);
    }
}
==================================================
public class Test {
    public static void main(String[] args) {
                                //创建自己定义泛型类的对象
      MyArrayList<String> list = new MyArrayList<>();
      list.add("aaa");
      list.add("bbb");
      list.add("ccc");
      System.out.println(list);
      //

      String s = list.get(0);
      System.out.println(s);//aaa

      MyArrayList<Integer> list1 = new MyArrayList<>();
      list1.add(1);
      list1.add(2);
      list1.add(3);
      Integer integer = list1.get(1);
      System.out.println(integer);//2
    }
}
21.3 泛型方法

方法中形参范例不确定时:


[*] 方案1:使用类名后定义的泛型(如21.2中的add方法)
在本类里全部方法都可以用
[*] 方案2:在方法申明上定义自己的泛型
只有本方法能用
格式:
修饰符 <类型> 返回值类型 方法名(类型 变量名){

}
举例:
public <T> void show(T t){
// 调用该方法时,T才能确定类型
}
public class ListUtil {

    // 私有化构造方法,不让外界本类的对象
    private ListUtil(){}

// 类中定义静态方法addAll, 用来添加多个集合的元素
//public static <E> void addAll(ArrayList<E> list,E e1,E e2){
    //   list.add(e1);
    //   list.add(e2);
    // }

   //可变参数 E...e
   public static <E> void addAll(ArrayList<E> list,E...e){
      for (E element : e) {
            list.add(element);
      }
    }

    public void show(){
      System.out.println("这是自定义工具类....");
    }

}
==========================================
public class Test {
    public static void main(String[] args) {

      // 在创建对象时,就可以确定泛型方法的形参类型
      ArrayList<String> list = new ArrayList<>();
      ListUtil.addAll(list,"6","8");
      System.out.println(list);//

      ArrayList<Integer> list2 = new ArrayList<>();
      ListUtil.addAll(list2,5,1);
      System.out.println(list2);//
    }
}
21.4 泛型接口

格式:
修饰符 interface 接口名<类型>{

}

举例:
public interface List<E>{

}


泛型接口的两种使用方式:
   1.实现类给出具体的类型
   2.实现类延续泛型,创建实现类对象时再确定类型

// 1.实现类给出具体的类型,实现List接口
public class MyArrayList2 implements List<String> {
// 省略重写List里的抽象方法
}
==================================================
public class Test {
    public static void main(String[] args) {
       //MyArrayList集合中只能存字符串,
       //创建MyArrayList对象时不用指定泛型
      MyArrayList list = new MyArrayList();
      list.add("666");
    }
}
// 2.实现类延续泛型,创建实现类对象时再确定类型
public class MyArrayList02<E> implements List<E> {
// 省略重写List里的抽象方法
}
==================================================
public class Test02 {
    public static void main(String[] args) {
      // 2.实现类延续泛型,创建实现类对象时再确定类型
      MyArrayList02<Integer> list = new MyArrayList02<>();
      list.add(6);
    }
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Java高级编程——泛型(泛型类、泛型接口、泛型方法,完成详解,并附有案例