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

Java泛型的定义与运用

泛型

泛型的作用从使用层面上来说是统一数据类型,防止将来的数据转换异常。从定义层面上来说,定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确定的类型,代码更灵活。
不使用泛型,少了限制,则在集合添加数据就不会类型异常的错误,导致运行结果出错。

public class Test {public static void main(String[] args) {ArrayList list = new ArrayList();list.add("1");list.add(666);list.add(true);for (Object o : list) {String s = (String) o;System.out.println(s.length());}}
}

在这里插入图片描述

  1. 泛型中的类型必须是引用类型
  2. 如果泛型不写,默认类型为Object

泛型的定义

含有泛型的类

new对象的时候确定类型,格式:

public class 类名<E>{ }
public class MyArrayList <E>{Object[] obj = new Object[5];//定义一个数组,充当ArrayList底层的数组,长度直接规定为10int size;public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致obj[size] = e;size++;return true;}@Overridepublic String toString() {return Arrays.toString(obj);}
}
public class Test {public static void main(String[] args) {Student<String> list1 = new Student<>();list1.add("张三");list1.add("李四");System.out.println(list1);//直接输出对象名,默认调用toStringStudent<Integer> list2 = new Student<>();list2.add(1);list2.add(2);System.out.println(list2);}
}

在这里插入图片描述

含有泛型的方法

调用的时候确定类型,其格式:

修饰符 <E> 返回值类型 方法名(E e)
public class Student {public static <E> void addAll(ArrayList<E> list, E...e){ //定义一个静态方法addAll,添加多个集合的元素,传入可变参数for (E element : e) {list.add(element);}}
}
public class Test {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();Student.addAll(list1, "张三", "李四");System.out.println(list1);ArrayList<Integer> list2 = new ArrayList<>();Student.addAll(list2, 1, 2);System.out.println(list2);}
}

在这里插入图片描述

含有泛型的接口

格式:

public interface 接口名<E>{  }

什么时候确定类型分两种,一种是在实现类的时候还没有确定类型,只能在new实现类的时候确定类型了,例如ArrayList。一种是在实现类的时候直接确定类型了比如Scanner。

public interface MyList <E>{public boolean add(E e);
}
public class MyArrayList<E> implements MyList<E>{Object[] obj = new Object[5];int size;public boolean add(E e){ //定义一个add方法,参数类型需要和泛型类型保持一致obj[size] = e;size++;return true;}@Overridepublic String toString() {return Arrays.toString(obj);}
}
public class Test {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();list.add("张三");list.add("李四");System.out.println(list);}
}

在这里插入图片描述

泛型通配符

泛型通配符使得我们能够更加灵活地处理泛型类型,使代码更通用且可复用。包括以下几类
E:Element (在集合中使用,因为集合中存放的是元素)
T:Type(Java 类)
K:Key(键)
V:Value(值)
N:Number(数值类型)
?:表示不确定的 java 类型

public class Test {public static void main(String[] args) {ArrayList<String> list1 = new ArrayList<>();list1.add("张三");list1.add("李四");ArrayList<Integer> list2 = new ArrayList<>();list2.add(1);list2.add(2);test(list1);test(list2);}public static void test(ArrayList<?> list){ //?表示不确定的 java 类型for (Object o : list) {System.out.println(o);}}
}

泛型的上限下限

泛型的上下限可以规定泛型的范围
上限:?只能接收extends后面的本类类型以及子类类型
格式:<? extends 类型>
下限:?只能接收super后面的本类类型以及父类类型
格式:<? super 类型>
Integer的父类Number
Number的父类Object
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux | 安装lb-toolkits 1.2.4库
  • 信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
  • STM32 SPI世界:W25Q64 Flash存储器的硬件与软件集成策略
  • Riscv 架构的合规测试
  • 【简历】湖南某一本大学:JAVA实习简历指导,面试通过率比较低
  • CBCOI招人啦!!!!!!!!
  • jenkins学习
  • 【安全设备】堡垒机
  • pcie 基础
  • Hadoop-22 Sqoop 数据MySQL到HDFS(全量) SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
  • 安全及应用(更新)
  • 深入理解MySQL中的EXPLAIN及type列
  • 华为HCIP Datacom H12-821 卷34
  • 近期勒索软件趋势统计及未来发展预测
  • 600Kg大载重起飞重量多旋翼无人机技术详解
  • [NodeJS] 关于Buffer
  • 《Java编程思想》读书笔记-对象导论
  • 【技术性】Search知识
  • 2017前端实习生面试总结
  • Git学习与使用心得(1)—— 初始化
  • HTML-表单
  • Intervention/image 图片处理扩展包的安装和使用
  • Java读取Properties文件的六种方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • OSS Web直传 (文件图片)
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • React Transition Group -- Transition 组件
  • React组件设计模式(一)
  • 讲清楚之javascript作用域
  • 为视图添加丝滑的水波纹
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • $L^p$ 调和函数恒为零
  • (35)远程识别(又称无人机识别)(二)
  • (C++)八皇后问题
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (function(){})()的分步解析
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (离散数学)逻辑连接词
  • (十一)图像的罗伯特梯度锐化
  • (一) 初入MySQL 【认识和部署】
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)程序员疫苗:代码注入
  • *** 2003
  • .net Application的目录
  • .net mvc部分视图
  • .net 使用ajax控件后如何调用前端脚本
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET框架
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET命令行(CLI)常用命令
  • .NET中GET与SET的用法
  • @javax.ws.rs Webservice注解