Java 源码中的 <? extends U>与 <? super L>是什么?

news2024/11/19 9:32:36

目录

?  extends  U

?  super  L

总结一下:


?  extends  U

其中extends意思为:扩大;扩展;延长,?我们可以把他看作一个通配符,匹配所有的接口,U就一个泛型占位符,所以连在一起可联想到,从U扩张到全部的意思,那实际的意思是什么那?

就是已U作为下限,扩展到所有实现了U接口的接口,类。

举例:

1 创建下面4个接口

package com.scm.myblog.utils.cs;

public interface A1 {
    String getName(String name);
}

------------------------
package com.scm.myblog.utils.cs;

public interface A2 {
    String getName2(String name2);
}
-------------------------
package com.scm.myblog.utils.cs;

public interface B1 extends A1,A2{
    String getNameB1(String nameB1);
}
-------------------------
package com.scm.myblog.utils.cs;

public interface C1 extends B1{
    String getNameC1(String nameC1);
}

2 创建一个测试类

package com.scm.myblog.utils.cs;

import java.util.ArrayList;
import java.util.List;

public class CS{
    public static void main(String[] args) {
        List<? extends B1> testUpper;
        testUpper=new ArrayList<B1>();
        testUpper=new ArrayList<A1>();
        testUpper=new ArrayList<A2>();
        testUpper=new ArrayList<C1>();
    }
}

我们验证我们的解释,从B1开始,到所有实现,继承了它的接口,类都可以作为泛型参数传入。

?  super  L

其中super意思为:超级的顶级的,?我们可以把他看作一个通配符,匹配所有的接口,L就一个泛型占位符,所以连在一起可联想到,从L作为顶级,到L之下的所有意思,那实际的意思是什么那?

就是已L作为上现,扩展到L所实现,继承的所有的接口,类。

我们替换代码

package com.scm.myblog.utils.cs;

import java.util.ArrayList;
import java.util.List;

public class CS{
    public static void main(String[] args) {
        List<? super B1> testUpper;
        testUpper=new ArrayList<B1>();
        testUpper=new ArrayList<A1>();
        testUpper=new ArrayList<A2>();
        testUpper=new ArrayList<C1>();
    }
}

 

结果如此,我们也得出结论,使用super,就是从B1开始,到B1所继承的,实现的所有的接口,类

总结一下:

 <?  extends  U>:表示从U开始到所有实现,继承了U的类,接口 

 <?  super L> :表示从L开始,到所有被L继承,实现的所有的类,接口

那么他们起到了什么作用?

1 规范泛型的界限,更加的安全

2 清晰的继承,实现关系,方便扩展

需要深入学习的看

(1条消息) Java泛型:<? extends XXXX> 中的? 和 extends 的理解和使用实例_请叫我大师兄_的博客-CSDN博客

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

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

相关文章

前后端分离下的-SpringSecurity

前后端分离下的SpringSecurity 项目创建 使用SpringBoot初始化器创建SpringBoot项目 修改项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2…

电容笔和Apple pencil的区别是什么?好用电容笔推荐

Apple Pencil与目前市场上常见的电容笔最大的不同之处在于&#xff0c;普通电容笔并不具备苹果Pencil特有的重力压感&#xff0c;而仅仅是一种倾斜的压感。不过&#xff0c;其在其它方面的表现也很出色&#xff0c;与Apple Pencil相似&#xff0c;而且价格仅为200元。现在&…

项目管理中的冲突是什么?

项目管理中的冲突可以采取多种不同的形式。团队成员在创意愿景上存在分歧&#xff0c;与高层管理人员就期望和时间表发生争执&#xff0c;甚至与第三方供应商发生争执&#xff0c;都是项目冲突的主要例子。 冲突的常见原因是什么&#xff1f; 基于项目的组织内部冲突的典型原因…

【记录】Git连接gitee、新建仓库

学习记录1.连接gitee2.新建仓库1.连接gitee https://www.cnblogs.com/cokefentas/p/14727592.html git安装与卸载 apt-get install git apt-get remove gitgit配置 配置用户名 git config --global user.name "your name" 配置邮箱 git config --global user.email…

2023都说测试行业饱和了,为什么我们公司新招的的测试开了15K?

其实每年都有人说测试行业饱和了&#xff0c;但依旧有很多人找到了薪资不错的工作。来说说我的看法吧&#xff0c;我认为不用担心测试会饱和的问题&#xff0c;我们人口基数大&#xff0c;任何一个行业都有竞争&#xff0c;这是非常正常的情况。而且在有技术能力的人面前永远没…

Vue3通透教程【十一】初探TypeScript

文章目录&#x1f31f; 写在前面&#x1f31f; TypeScript是什么&#xff1f;&#x1f31f;TypeScript 增加了什么&#xff1f;&#x1f31f;TypeScript 初体验&#x1f31f; 写在最后&#x1f31f; 写在前面 专栏介绍&#xff1a; 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue …

什么是进程,线程,协程

一.进程1.简介计算机的核心是CPU&#xff0c;它承担了所有的计算任务&#xff1b;而操作系统是计算机的管理者&#xff0c;它负责任务的调度、资源的分配和管理&#xff0c;统领整个计算机硬件&#xff1b;应用程序则是具有某种功能的程序&#xff0c;程序是运行于操作系统之上…

十分钟验证一个轻量化车联网解决方案

智能网联汽车在车联网的应用上&#xff0c;通常是以智能传感器、物联网、GIS技术为基础&#xff0c;结合大数据、人工智能技术&#xff0c;通过OT&#xff08;Operation tecnology&#xff09;和IT&#xff08;information tecnology&#xff09;融合的方式&#xff0c;实现智能…

使用Ubuntu22.04搭建k8s环境和一些k8s基础知识

minikube搭建 基本环境 我使用virtualBox构建的ubuntu&#xff0c;选择4核4G内存minikube是一个K8S集群模拟器&#xff0c;可以快速构建一个单节点的集群&#xff0c;用于在本地测试和开发首先使用官方脚本安装docker curl -fsSL https://test.docker.com -o test-docker.sh…

nacos源码服务注册

nacos服务注册序言1.源码环境搭建1.1idea运行源码1.2 登录nacos2.服务注册分析2.1 客户端2.1.1容器启动监听2.1.2注册前初始化2.1.3注册服务2.2 服务端2.2.1注册2.2.2重试机制3.注意事项序言 本文章是分析的是nacos版本2.2 这次版本是一次重大升级优化&#xff0c;由原来&#…

【MySQL | 基础篇】02、MySQL 函数详解

目录 一、字符串函数 1.1 concat : 字符串拼接 1.2 lower : 全部转小写 1.3 upper : 全部转大写 1.4 lpad : 左填充 1.5 rpad : 右填充 1.6 trim : 去除空格 1.7 substring : 截取子字符串 1.8 案例 二、数值函数 2.1 ceil&#xff1a;向上取整 2.2 floor&#xff…

【Java版oj】day34收件人列表、养兔子

目录 一、收件人列表 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、养兔子 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 一、收件人列表 …

Python机器学习:支持向量机2

昨天是简单的了解了一下支持向量机要干什么以及线性可分支持向量机是怎么一回事&#xff0c;今年来看另一种&#xff1a;线性支持向量机&#xff1a; 我们昨天说的&#xff0c;线性可分支持向量机的目的就是找到一个超平面来吧一个数据集分成正负两个部分&#xff0c;但是实际…

一天学完C++的标准模板库STL

标准模板库STLstring字符串如何对string字符串的初始化&#xff08;声明&#xff09;&#xff1f;如何遍历string对象进行访问&#xff1f;如何对string类型的字符串进行增删改查&#xff1f;对string字符串增加一些字符对string字符串删除一些字符对string字符串改动一些字符在…

【hello Linux】环境变量

目录 1. 环境变量的概念 2. 常见的环境变量 3. 查看环境变量 4. 和环境变量相关的命令 5. 环境变量的组织方式 6. 通过代码获取环境变量 7. 通过系统调用获取环境变量 Linux&#x1f337; 在开始今天的内容之前&#xff0c;先来看一幅图片吧&#xff01; 不知道你们是否和我一…

数据结构的加强甜点-序列1

目录 尾递归 问题 介绍 特点 原理 答案 数组栈堆内存分配 前言 分析 再分析 所谓多维数组 程序局部性原理应用 尾递归 问题 在空间复杂度这块&#xff0c;有个O(n)示例如下&#xff1a; void recur(int n) {if (n 1) return;return recur(n - 1); } 这很明显是…

Canal(1):Canal入门

1 什么是 Canal 阿里巴巴 B2B 公司&#xff0c;因为业务的特性&#xff0c;卖家主要集中在国内&#xff0c;买家主要集中在国外&#xff0c;所以衍生出了同步杭州和美国异地机房的需求&#xff0c;从 2010 年开始&#xff0c;阿里系公司开始逐步的尝试基于数据库的日志解析&am…

SpringSecurity之微服务权限解决方案

目录 前置知识点 什么是微服务 微服务的优劣 优点 缺点 微服务本质 微服务认证与授权实现思路 认证预授权的过程 前置知识点 什么是微服务 微服务&#xff08;或称微服务架构&#xff09;是一种云 原 生 架构方法&#xff0c;在单个应用中包含众多松散耦合而且可单独部…

君子生非异也,善假于物也。【借助外力获取能量,主动改善生存环境。】

文章目录 引言I 借助外力1.1 制造很实用工具1.2 火引言 人类懂得借助外力,从被动地适应环境的进化,进入到主动改善生存环境的发展轨道上了。 人之所以为人,是因为我们善于借助外力,而不是先天有多少优势。 I 借助外力 学会制造和使用工具,提高能量获取的效率学会使用火,…

苹果手写笔有必要买吗?性价比电容笔排行榜

众所周知&#xff0c;苹果的正版Pencil的售价过于的高&#xff0c;一般的用户是买不起的。那么&#xff0c;市场上是否会有一款苹果Pencil的平替电容笔&#xff0c;而这两款电容笔在功能上是完全相同的&#xff1f;的确如此。国内的平替电容笔在书写方面上跟苹果Pencil差别不大…