解释Java中的泛型通配符和泛型方法

泛型通配符(Wildcard)

Java 中的泛型通配符 ? 使用在泛型类型的声明中,表示未知的类型参数。通配符通常用在参数、字段、局部变量或者返回类型上,为泛型带来了更高的灵活性。泛型通配符主要分为三种形式:

  1. 无界通配符(Unbounded Wildcard) ?

    • 表示任意类型。如果你想使用泛型类但又不关心具体的类型参数,这时可以使用无界通配符。
    • 例如,List<?> 表示“具有任何类型的对象列表”。
  2. 有界通配符(Bounded Wildcard)

    • 有界通配符包括上界通配符 ? extends Type 和下界通配符 ? super Type
    • 上界通配符 ? extends Type 表示该通配符可以是 Type 或其子类。这限制了未知类型的上界。
      • 例如,List<? extends Number> 可以是 Number 或其任何子类的列表。
    • 下界通配符 ? super Type 表示该通配符可以是 Type 或其父类。这限制了未知类型的下界。
      • 例如,List<? super Integer> 可以是 Integer 或其任何父类的列表,包括 Number 或 Object。

泛型方法

泛型方法允许在方法声明上指定类型参数,这样,即使在非泛型类中,方法也能是泛型的。泛型方法对于创建独立于类的泛型代码非常有用。在方法返回类型之前声明类型参数,使得该方法能够独立于类定义其自身的泛型类型。

基本结构

public <T> List<T> fromArrayToList(T[] a) {return Arrays.stream(a).collect(Collectors.toList());
}

在这个例子中,<T> 在返回类型 List<T> 前面声明了一个名为 T 的类型参数。这表明该方法的返回类型和参数类型是相同的泛型类型 T,而这个类型由调用者确定。

泛型方法还可以有多个类型参数,只需在方法返回类型之前以逗号分隔即可定义。例如,public <T, U> void foo(T t, U u)

泛型方法的类型参数在调用方法时自动推断出来,不必显式指定(大多数情况下),例如 fromArrayToList(new Integer[] {1, 2, 3}) 自动推断出 T 为 Integer

总的来说,泛型通配符和泛型方法是 Java 泛型编程中的强大工具,它们提供了编码时的弹性和类型安全性。通过泛型通配符,可以编写更加通用的代码;而泛型方法则允许在方法级别上实现类型抽象和类型安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/835990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO: json 处理

需要引入"encoding/json"包 json解析到map jsonStr : "{\"a\":\"test\",\"b\":\"testb\"}" var dat map[string]string err : json.Unmarshal([]byte(jsonStr), &dat) if err nil {fmt.Println(dat) }结果…

内容检索(2024.05.12)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 本期更新内容&#xff1a; 1. 信号仿真类话题-…

webpack5基础和配置

初步体验webpack打包 webpack是一个静态资源打包工具。 它会以一个或多个文件作为打包的入口&#xff0c;将我们整个项目所有文件编译组合成一个或多个文件输出出去。 输出的文件就是编译好的文件&#xff0c;就可以在浏览器段运行了。 1.初始化最简单的一个目录文件&#xff…

JavaSE——集合框架一(1/7)-集合体系概述(集合体系结构,Collection集合体系)、Collection的常用方法(介绍,实例演示,代码)

目录 集合体系概述 集合体系结构 Collection集合体系 Collection的常用方法 介绍 实例演示 完整代码 集合体系概述 集合体系结构 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。 为了满足…

element-ui 中 如何在el-upload的移除文件列表事件 on-remove 中调用后端进行数据库的删除。

问题描述&#xff1a; 刚开始的时候我设置的是实时上传&#xff1a; auto-upload"true", :http-request"uploadResource"绑定的这个方法就去后端进行实时上传附件了&#xff0c;这个时候就已经保存到数据库。 那么问题来了&#xff1a; :on-remove"…

flask+layui显示监控视频

1、flask简介 flask是python中的一个轻量级web框架。 2、layui简介 Layui 是一套开源免费的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;非常适合网页界面的快速构建。Layui 区别于一众主流的前端…

# ERROR: node with name “rabbit“ already running on “MS-ITALIJUXHAMJ“ 解决方案

ERROR: node with name “rabbit” already running on “MS-ITALIJUXHAMJ” 解决方案 一、问题描述&#xff1a; 1、启动 rabbitmq-server.bat 服务时&#xff0c;出错 Error 2、查询 rabbitmqctl status 状态时&#xff0c;出错 Error 3、停止 rabbitmqctl stop 服务时&a…

Rust 语言的“命名空间” —— mod

在Rust中&#xff0c;虽然没有像C中的namespace这样的显式关键字&#xff0c;但是Rust通过模块&#xff08;mod&#xff09;系统提供了一种类似命名空间的功能。模块允许你将相关的代码组织在一起&#xff0c;并可以通过pub关键字来控制哪些项&#xff08;如函数、结构体、枚举…

软考 系统架构设计师系列知识点之杂项集萃(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;2&#xff09; 第4题 软件架构贯穿于软件的整个生命周期&#xff0c;但在不同阶段对软件架构的关注力度并不相同&#xff0c;在&#xff08; &#xff09;阶段&#xff0c;对软件架构的关注最多。…

clickhouse卸载与安装

ClickHouse是一个用于联机分析&#xff08;OLAP&#xff09;的列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;来自于俄罗斯本土搜索引擎企业Yandex公司。它是为处理大规模数据集而设计的&#xff0c;并提供高性能和低延迟的查询支持。 注意&#xff1a;此教程的运…

关于画图-一次性搞定各类高级论文作图及配色

关于画图-一次性搞定各类高级论文作图及配色 图&#xff08;Figure&#xff09;可以让各类论文的结果更加直观&#xff0c;有时候一张图片比一大段文字更有说服力。 但许多新手作者可能会有一连串的疑惑&#xff1a;数据这么多&#xff0c;什么时候该做什么类型的图&#xff…

LabVIEW开发MOOG控制系统数据处理软件

LabVIEW开发MOOG控制系统数据处理软件 在现代航空领域&#xff0c;飞机结构的静强度试验是保证飞机安全运行的关键环节。MOOG加载控制系统作为试验中的关键设备&#xff0c;其数据输出的直观性和易处理性对于提高试验效率具有重要意义。设计了一种基于LabVIEW的MOOG控制系统数…

redis并发之跳表

简介 跳表&#xff08;Skip List&#xff09;是一种用于实现有序集合&#xff08;Sorted Set&#xff09;的数据结构&#xff0c;在 Redis 中被广泛应用。跳表的设计旨在提供高效的有序集合操作&#xff0c;可以将跳表理解为基于二分查找的索引结构。跳表通过构建多层索引&…

Minio 纠删码及分布式Minio集群环境搭建

系列文章目录 第二章 Minio 纠删码及分布式Minio集群环境搭建 Minio 纠删码及分布式Minio集群环境搭建 系列文章目录纠删码什么是纠删码&#xff1f;为什么纠删码有用?什么是位衰减bit rot保护? 纠错码单机模式环境搭建分布式MinIO分布式存储可靠性常用方法冗余校验 分布式M…

Pikachu 靶场 File Inclusion 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

Android面试题之kotlin热流和channel

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点 于冷流不同&#xff0c;在垃圾回收之前&#xff0c;flow里的值都是存在内存之中&#xff0c;并且处于活跃状态 StateFlow StateFlow是一个状态容…

【Python】items()方法的介绍和使用方式

相关链接&#xff1a;【Python】顺序字典&#xff08;OrderedDict&#xff09;的定义和使用方式 相关链接&#xff1a;【Python】普通字典的定义和使用方式 相关链接&#xff1a;【Python】get()方法的介绍和使用方式 在 Python 中&#xff0c;字典&#xff08;dict&#xff0…

DSA理解理解蓝桥杯例题signature

一、历史 1991年8月&#xff0c;NIST&#xff08;Nation Institute of Standards and Technology&#xff0c;美国国家标准技术研究所&#xff09;提出了数字签名算法&#xff08;DSA&#xff09;用于他们的数字签名标准&#xff08;DSS&#xff09;中。 DSA是算法&#xff0c…

什么是渐进式框架

渐进式框架是一种设计理念&#xff0c;它允许开发者根据项目需求逐步采用框架的功能。这意味着你可以从一个非常轻量、简洁的开始&#xff0c;根据实际需要不断引入更多的组件和功能。这种方式的好处在于它使得项目的起点低、上手快&#xff0c;同时随着项目的增长&#xff0c;…

双向带头循环链表(图解)

文章目录 头节点(哨兵位)双向循环结构头插尾插头删尾删在指定位置之前插入数据删除指定位置之前的数据销毁链表 全部代码结语 单链表地址 头节点(哨兵位) 什么是头节点呢?头节点也叫哨兵节点,他在链表中进行不了任何操作,只是用来放哨用的,在单链表中我们当我们尾插的时候我们…