当前位置: 首页 > news >正文

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

文章目录

  • 泛型
    • 21.1 概述
    • 21.2 泛型类
    • 21.3 泛型方法
    • 21.4 泛型接口

泛型

21.1 概述

JDK5中引入的特性,在编译阶段约束操作的数据类型,并进行检查

泛型格式:<数据类型>

泛型只能支持引用数据类型,如果写基本数据类型需要写对应的包装类。

泛型好处:

  • 统一数据类型
  • 把运行时期的问题提到了编译期间,避免了强制类型转换可能出现的异常,因为编译阶段类型就能确定下来。

泛型细节:

  • 泛型中不能写基本数据类型

    因为基本数据类型不能转成Object类型,包装类才能转成Object类型

  • 指定泛型后传递数据时,可以传入该类类型或者其子类类型

  • 如果不写泛型,类型默认是Object

21.2 泛型类

使用场景:当一个类中,某个变量的数据类型不确定时,可以定义带有泛型的类。

格式:修饰符 class 类名<类型>{....}举例:E可以理解为变量,但不是变量,不是记录数据的,是用来记录数据类型的public class ArrayList<E>{//.....  当创建给类对象时,E就确定类型}
//自定义泛型类
public class MyArrayList<E>{Object[] obj = new Object[5];int size; // size:表示长度,即存了几个元素// E:表示不确定的类型// e:形参的名字,变量名// 添加元素public boolean add(E e){obj[size] = e;size++;return true;}// 获取元素public E get(int index){return (E) obj[index];}// 重写toString方法@Overridepublic 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);//[aaa, bbb, ccc, null, null]String s = list.get(0);System.out.println(s);//aaaMyArrayList<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...epublic 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);//[6, 8]ArrayList<Integer> list2 = new ArrayList<>();ListUtil.addAll(list2,5,1);System.out.println(list2);//[5, 1]}
}

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);}
}
http://www.lryc.cn/news/444995.html

相关文章:

  • GPU硬件如何实现光栅化?
  • Python写入文件内容:从入门到精通
  • 相亲交易系统源码详解与开发指南
  • Golang | Leetcode Golang题解之第413题等差数列划分
  • 汽车总线之----FlexRay总线
  • 前端代替后端做分页操作
  • L3 逻辑回归
  • Flink系列知识之:Checkpoint原理
  • 智算中心动环监控:构建高效、安全的数字基础设施@卓振思众
  • PyTorch VGG16手写数字识别教程
  • 安卓13删除下拉栏中的设置按钮 android13删除设置按钮
  • FDA辅料数据库在线免费查询-药用辅料
  • git pull 报错 refusing to merge unrelated histories
  • STM32G431RBT6(蓝桥杯)串口(发送)
  • 使用 typed-rest-client 进行 REST API 调用
  • 在Ubuntu 14.04上安装Solr的方法
  • LabVIEW提高开发效率技巧----使用LabVIEW工具
  • Pyspark dataframe基本内置方法(4)
  • 配置win10开电脑时显示可登录账号策略
  • 01-Mac OS系统如何下载安装Python解释器
  • 24 C 语言常用的字符串处理函数详解:strlen、strcat、strcpy、strcmp、strchr、strrchr、strstr、strtok
  • 数据驱动农业——农业中的大数据
  • 学习《分布式》必须清楚的《CAP理论》
  • navicat无法连接远程mysql数据库1130报错的解决方法
  • JetPack01- LifeCycle 监听Activity或Fragment的生命周期
  • OpenCSG推出StarShip SecScan:AI驱动的软件安全革新
  • 占道经营检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 828华为云征文 | 云服务器Flexus X实例:RAG 开源项目 FastGPT 部署,玩转大模型
  • MySQL之基本查询(一)(insert || select)
  • 基于深度学习的多智能体协作