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

【Java】泛型通配符

类型通配符

  1. 类型通配符<?> 一般用于接受使用,不能够做添加
  2. List<?>:表示元素类型未知的list,它的元素可以匹配任何类型
  3. 带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
  4. 类型通配符上限:<? extend 类型> List <? extends MayiktParent>:它表示的类型是MayiktParent或子类型
  5. 类型通配符下限:<? super 类型> List <? super MayiktParent>:它表示的类型是MayiktParent或者其父类型

示例代码

package com.collection.Demo06;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Test02 {public static void main(String[] args) {ArrayList<String> arrayListString = new ArrayList<>();for (int i = 0; i < 5; i++) {arrayListString.add("i:" + i);}ArrayList<Integer> arrayListInteger = new ArrayList<>();printList(arrayListString);printList(arrayListInteger);List<?> arrayList = new ArrayList<>();
//        arrayList.add("fsd");//报错,不能添加}//参数List类型的泛型,明确String类型
//    public static void printList(List<String> stringList){}/*** 如果不明确参数List类型的泛型是什么类型,可以使用<?>* List<?> 只能用于接收,可以接收所有类型的泛型类型,但不能用于添加*/public static void printList(List<?> stringList) {
//        stringList.add("mayilt");//报错,不能用于添加,∵类型不明确,没法添加
//        Object o = stringList.get(0);//不能添加,但可以get,类型是ObjectIterator<?> iterator = stringList.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

上限和下限

MayiktParent.java 父类

package com.collection.Demo06;public class MayiktParent {
}

Student.java 子类

package com.collection.Demo06;public class Student extends MayiktParent{
}

Test03.java 测试

package com.collection.Demo06;import java.util.ArrayList;
import java.util.List;public class Test03 {public static void main(String[] args) {List<MayiktParent> mayiktParents = new ArrayList<>();List<Student> students = new ArrayList<>();List<Integer> integers = new ArrayList<>();List<Object> objects = new ArrayList<>();printList1(mayiktParents);//上限printList1(students);//上限
//        printList1(integers);//报错,∵ integer与MayiktParent没有任何关系
//        printList1(objects);//报错,只能是MayiktParent与它的子类printList2(mayiktParents); //下限printList2(objects);//下限——父类
//        printList2(students);//报错
//        printList2(integers);//报错printList3(mayiktParents);printList3(students);printList3(objects);
//        printList3(integers);//报错}/*** 问题: List<?> 接收所有类型,如何限制?* 解决: 类型通配符 上限 和 下限* 上限: <? extend 类型> List <? extends MayiktParent>:它表示的类型是MayiktParent或子类型* 下限: <? super 类型> List <? super MayiktParent>:它表示的类型是MayiktParent或者其父类型*///List<? extends MayiktParent>     只能接收MayiktParent 和它的子类public static void printList1(List<? extends MayiktParent> list) { //上限}//List<? super MayiktParent>       只能接收MayiktParent 和它的父类public static void printList2(List<? super MayiktParent> list) { //下限}//如果想是使用super让可以接收mayiktParents和studentspublic static void printList3(List<? super Student> list) { //下限}
}

下一篇文章:可变参数

http://www.lryc.cn/news/209619.html

相关文章:

  • NNDL:作业五
  • OpenAI大模型项目计划表(InsCode AI 创作助手)
  • MyBatis入门的第一个程序
  • React项目中使用zustand状态管理详细教程
  • Linux 扩展 root 文件系统
  • 19c-rac环境安装AHF
  • ESP32网络开发实例-Web控制按钮与硬件状态同步
  • 分享一下怎么做陪诊小程序
  • 【Linux】Linux+Nginx部署项目
  • 【git命令】删除分支
  • LabVIEW开发TDS1000 和TDS2000 系列泰克示波器
  • 1. 两数之和、Leetcode的Python实现
  • TSINGSEE青犀基于AI视频识别技术的平安校园安防视频监控方案
  • 基于LSTM encoder-decoder模型实现英文转中文的翻译机器
  • 世界前沿技术发展报告2023《世界航空技术发展报告》(四)无人机技术
  • 【JAVA学习笔记】48 - 八大常用Wrapper类(包装类)
  • 学习笔记:Splay
  • JAVA中的垃圾回收器(1)
  • Windows 10/11如何恢复永久删除的文件?
  • 【Shell 系列教程】shell介绍(一)
  • 考研数学中放缩法和无穷项求和
  • 计算机网络常识
  • React之Jsx如何转换成真实DOM
  • OpenCV学习(六)——图像算术运算(加法、融合与按位运算)
  • 如何做好一次代码审查,什么样是一次优秀的代码审查,静态代码分析工具有哪些
  • 【Android】一个contentResolver引起的内存泄漏问题分析
  • 2023年正版win10/win11系统安装教学(纯净版)
  • 系统架构设计师-第11章-未来信息综合技术-软考学习笔记
  • Python __new__()方法详解
  • 虹科 | 解决方案 | 汽车示波器 索赔管理方案