java generic super/extends (java 泛型中的super/extends)

PADS Layout新手必看:从元件摆放到地线处理的10个实用技巧 本文为PADS Layout新手提供了10个实用技巧,涵盖元件摆放、地线处理等关键环节。从功能模块化布局到高频信号处理,再到电磁兼容性设计,帮助初学者快速掌握PCB设计核心技能,提升Layout效率和质量。特别适合需要优化PADS Layout工作流程的设计师参考。 阅读详情

在最新的ConcurrentHashMap中有这么一个方法声明


    @SuppressWarnings("unchecked")
    public V computeIfAbsent(K key, MappingFunction<? super K, ? extends V> mappingFunction) {
        if (key == null || mappingFunction == null)
            throw new NullPointerException();
        return (V)internalComputeIfAbsent(key, mappingFunction);
    }



相比 putIfAbsent,这个方法传入一个计算函数MappingFunction,而不是具体的值。这样只有在需要的时候调用这个MappingFunction创建值,而不是预先创建好。

很有用的一个新方法。但本文的重点不在此,MappingFunction<? super K, ? extends V> 的泛型声明吸引了我。

为什么不都使用用extends?super和extends区别在哪?
java泛型中的上界下界,还有 java泛型中的有界类型, 对此作了解释,大意是
  • super是声明下界,extends是声明上界
  • 声明了下界的泛型容器只能add该泛型参数类型,声明了上界的泛型容器只能get该泛型参数类型
画图如下:

不过本文开始的MappingFunction<? super K, ? extends V>,并不是将泛型声明使用在容器中。

   public static interface MappingFunction<K, V> {
        /**
         * Returns a non-null value for the given key.
         *
         * @param key the (non-null) key
         * @return a non-null value
         */
        V map(K key);
    }

从上面的map中可见,MappingFunction<K,V>中的K在computeIfAbsent中声明ConcurrentHashMap<K,V>的K为其super 边界,V声明ConcurrentHashMap<K,V>的V为其extends边界。即map方法可以接收ConcurrentHashMap key的父类(包括边界),返回的value必须是ConcurrentHashMap value的子类(包括边界)。

假如有ConcurrentHashMap<C1, C2>, computeIfAbsent可以接受MappingFunction<Object, C3>。
C3 map(Object) 的方法可以这样使用 C2  =  map(C1)

这样我们总结super和extends的使用,得到一个更广泛的原则。
  • super用来限制传入的参数
  • extends使用限制返回的参数

紫光同创国产FPGA学习之Fabric Debugger 文章从紫光同创参考书拷贝过来的。因为我用的时候,看了一下就会用了(纯粹只是会用了,默认和xilinx的一样),没有看教程。先更新点文本,后面在写程序。 一、      软件简介 Fabric Debugger是一款界面化的FPGA芯片调试工具,能够针对公司目前以及未来的FPGA芯片进行在线调试。本软件直接与JtagHub、DebugCore交互,能够实时的配置目标FPGA、设置触发条件并且观测结... 阅读详情

相关推荐

数十个锂电池充放电电路,锂电池充放电芯片

关乎锂电池供电的产品,在锂电池上,需要三个电路系统:1,锂电池保护电路,2,锂电池充电电路,3,锂电池输出电路。 内容目录: 单节的锂电池保护电路单节为3.7V锂电池(也叫4.2V)和3.8V锂电池(也叫4.35V) 单节的锂电池充电电路即锂电池保护板 单节的锂电池输出电路锂电池转换稳压输出为:1.2V,3.3V,5V,12V等等 两节的锂电池保护电路两节串联7.4V锂电池(也叫8.4V) 两节的锂电池充电电路即两节锂电池保护板 两节...

kuakewei123的博客 1万+

三分钟直观理解入参为 Function<? super T, ? extends V> :从需求侧概念入手

两句话理解函数接口为什么是 ? super T, ? extends V

gocodemango的专栏 2499

关于海康网络摄像头使用VLC或者Opencv拉流有延迟的问题

先说结论,我用VLC或者Pyhton opencv直接拉取海康网络摄像头的rtsp流,会有1-2s延时,特别明显。环境:Windows + VLC / Openc-Python。如上面文章介绍,我使用的时候遇到一处错误,需要把代码中的。海康SDK:与网页视频相比,几乎是同步的。上面说的延时,也是与摄像头网页视频相比的。ffplay 去掉缓存:延时1s左右。这两处地方改成左斜杠,才能运行。opencv拉流使用的是。多线程:延时1s左右。

yljxh的博客 4497

Java8 Map computeIfAbsent方法说明

computeIfAbsent   // 方法定义 default V computeIfAbsent(K key, Function&lt;? super K, ? extends V&gt; mappingFunction) {     ... } // java8之前。从map中根据key获取value操作可能会有下面的操作 Object key = map.get("key");...

u010325193的博客 944

Silvaco TCAD 2018安装后,如何配置TonyPlot 5.0.22.R并解决绘图报错?

本文详细介绍了在Windows系统上安装Silvaco TCAD 2018后,如何正确配置TonyPlot 5.0.22.R并解决常见的绘图报错问题。内容包括版本兼容性分析、环境变量设置、常见错误解决方案以及性能优化建议,帮助用户顺利完成仿真结果的可视化工作。

weixin_31031711的博客 419

从2D到3D地图开发:手把手教你用Cesium+Three.js实现卫星轨迹可视化(含代码片段)

本文详细介绍了如何结合Cesium与Three.js实现从2D到3D的卫星轨迹可视化。通过对比传统Web GIS框架的局限,阐述了Cesium处理三维地理与轨道数据、Three.js负责高级图形渲染的分工优势,并提供了从环境搭建、坐标同步到动态粒子效果实现的完整代码实战指南。

nut55的博客 671

2021-02-05实习日报

从特征服务项目中学习到的新东西 map.computIfAbsent public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 此方法首先判断map中是否存在指定key的值,如果不存在会自动调用mappingFunction(key)计算key的value,然后将key=value放入到map中,如果mappingFunction(key)返回的值为null或抛出异常,则不会有记录存入map

qq_42337039的博客 307

STM32CubeMX——循迹传感器TCRT5000的使用

前言 人生如逆旅,我亦是行人。 ————苏轼《临江仙·送钱穆父》 一、介绍 TCRT5000描述:(带有晶体管输出的反射光学传感器) TCRT5000是一种反射式光学传感器,它包括一个红外发射器和一个3.5mm引线封装的光电晶体管,可阻挡可见光。还具有1mA 典型被测输出电流,2.5mm峰值工作距离,可应用传感与仪表,工业等行业。 TCRT5000具有紧凑的结构,其中发射光源和探测器布置在同一方向,通过使用来自物体的反射红外光束来感知物体的存在。工作波长为950毫米,探测器由光电晶体管组成

W_Oilpicture的博客 1万+

JAVA8 ConcurrentHashMap.computeIfAbsent 的使用及说明

1.简述 在JAVA8的Map接口中,增加了一个方法computeIfAbsent,此方法签名如下: public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 如果mappingFunction(key)返回的值为null或抛出异常,则不会有记录存入map 此方法首先判断...

Luffy的专栏 1万+

华为od 面试八股文_Python_05_含答案

华为od 面试八股文_Python_05_含答案

MISAYAONE的博客 2554

企业级大数据平台的数据网格(Data Mesh)转型之路

随着企业数字化转型的深入,传统大数据平台面临数据孤岛化、治理成本高、业务响应慢等核心痛点。数据网格作为一种新兴的分布式数据管理架构,通过领域驱动设计(DDD)、数据产品化和联邦治理模式,为企业提供了打破数据壁垒、提升数据生产力的全新路径。本文聚焦企业级数据平台从传统架构(数据湖/数据仓库)向数据网格转型的关键技术、实施步骤和组织配套,涵盖技术架构设计、核心算法实现、项目实战案例及工具链推荐。背景介绍:定义转型目标、术语体系与核心挑战核心概念与联系:解析数据网格四大支柱及技术架构图谱核心算法原理。

AI 领航者的博客 1083

JAVA Map类compute方法详解及样例

JAVA Map类提供了compute方法,定义是: default V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction) 用于计算指定key的值,如果Map中不存在指定的key,则计算时值为null, 并将计算的结果作为key的值,但需要注意3点: 如果remappingFunction函数的结果是null, 如果Map存在此key且值不为null,则删除此key, 否则不做改

penriver的博客 1万+

YOLO训练/写作脚本目录一览 | 涉及标签格式转换、数据扩充、热力图、感受野、精度曲线、数量统计等近百个脚本文件

在大家购买专栏后,便可获得全部的脚本文件。在获取到文件后,只需按照将程序放在个人项目中即可一键运行。

Limiiiing的博客 2376

Java泛型 extends,super和通配符的理解

1.java泛型的特点 通常情况下,一个编译器处理泛型有两种方式:      1.Code specialization。在实例化一个泛型类或泛型方法时都产生一份新的目标代码(字节码or二进制代码)。例如,针对一个泛型list,可能需要 针对string,integer,float产生三份目标代码。      2.Code sharing。对每个泛型类只生成唯一的一份目标代码;该泛型类的所有

The Void 2082

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java 泛型中? extends Class和? super Class的意义和PECS原则

最近在读Thinking in Java 的 Generics 章节,主要讲Java中泛型的设计理念和使用方法。 其中,关于通配符和关键字 ? 、extends、super 在泛型中的应用一直没有理清楚头绪,通过Google发现了一个有意思的问题觉得很值得记录一下,所以写下本文。 这个问题是这样的:对于class A{}和class B extends A{}在如下代码中会出现编译错误: ...

ALEX的博客 2835

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

泛型通配符 Generic Wildcards —— ? extends super

Generic Wildcards 1. Upper Bounded Wildcards 上限通配符 上限通配符 upper bounded Wildcards ? extends Person extends关键字:在上限通配符中,extends关键字是表示通常的意义,它即代表着“继承”(一个类),也代表着“实现”(一个接口)。 以下述代码中的List<Person>和List<? extends Person>为例,前者相比受到更多的约束,它只能匹配Person类,而后者

Cap220590的博客 325

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

泛型Generic

文章目录泛型为什么要使用泛型Generic泛型的使用泛型类泛型接口泛型方法泛型通配符 泛型 为什么要使用泛型Generic 泛型,JDk1.5新加入的,解决数据类型的安全性问题,其主要原理是在类声明时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例时只要指定好需要的具体的类型即可. Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常.同时,代码更加简洁、健壮. Java中的泛型,只在编译阶段有效.在编译过程中,

qq_48914206的博客 463

泛型(Generic)

泛型的简介: 泛型:标签 举例:中药店每个抽屉外面贴着标签;超市购物架上有很多瓶子,每个瓶子装着什么有标签 泛型的设计背景: 集合容器类在设计阶段、声明阶段不能确定这个容器到底实际存的是什么类型的对象,多以在JDK1.5前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素是如何保存,如何管理等是确定的,因此此时把元素类型设计成一个参数,这个类习惯参数叫做泛型。Collection<E>,...

来杯奶茶 358

Java泛型

泛型(Generic)的简单理解就是将数据类型当作参数。 定义泛型结构时使用(抽象的),而在创建泛型类对象或是使用泛型方法的时候指定数据类型。 这样既提高了类的可复用性,又保证了数据类型的一致性,减少了数据类型不一致的情况。

qq_62225979的博客 181

Java 泛型 (Generic) 入门到精通:语法 + 原理 + 实战 + 避坑

泛型 = 参数化类型把数据类型当作参数传递,让类 / 接口 / 方法可以支持任意类型,同时保留类型安全。Java 泛型是伪泛型编译后泛型信息会全部消失,字节码中没有泛型!// 输出 true!泛型类型被擦除了泛型 = 类型安全 + 代码复用 + 自动推导泛型类、泛型接口、泛型方法extends T>super T>类型擦除统一返回泛型 R<T>泛型 + 枚举 = 最优雅的业务常量方案。

2601_95366044的博客 742

深入理解Java泛型

目录前言为什么要有泛型具体举例泛型的概念具体举例集合中如何使用泛型注意自定义泛型结构自定义泛型类举例自定义泛型接口自定义泛型方法泛型继承如何使用通配符通配符的上下界(有限制条件的通配符) 前言 在jdk5.0之前Java所使用的类,接口,泛型都是没有指定可以操作的数据类型的,这个问题在集合中体现得很突出,这样的话就会使得数据有可能不安全,在jdk5.0以后java引进了泛型,解决了这一问题,在操作数据的时候指明了类型,大大提高了数据的安全性。 为什么要有泛型 指明一个结构所能操作的数据类型保证了操作数据的

若离风技术博客 665

JAVA重点基础、进阶知识及易错点总结(12)泛型(Generic)

Java泛型深度解析:类型安全与源码阅读关键 泛型是Java中确保类型安全的核心特性,通过编译期检查避免ClassCastException,提升代码复用性。其核心机制是类型擦除,即泛型信息在编译后被擦除为原始类型,导致运行时无法获取泛型参数,带来诸多限制(如不能实例化泛型、创建泛型数组等)。 通配符与PECS原则是处理集合参数的关键: ? extends T(生产者):支持读取,但不可写入。 ? super T(消费者):支持写入,但读取仅得Object。 实际开发中,可通过传递Class<T&gt

qq_52071206的博客 604

第18章 泛型入门

集合里能装任何类型的对象,但取出时要强转,容易出错。泛型(Generics)解决了"类型安全"问题:在编译期就限定集合装什么类型。本节掌握泛型的基本用法。

成熟的标题 474

泛型(Generics)

泛型(Generics)        1)泛型的定义              泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type),也就是说 所操作的数据类型被     指定为一个参数,在用到的时候在指定具体的类型。              这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。              泛...

毕富国的博客 355

Java泛型核心知识点+实战代码

Java泛型核心知识点摘要 本文全面解析Java泛型特性,从基础概念到高级应用。泛型作为编译期类型安全机制,解决了传统集合的类型转换问题。主要内容包括: 泛型基础:参数化类型概念、编译期校验机制、类型安全优势,通过ArrayList示例对比泛型前后代码差异。 泛型类/接口:定义语法、使用方式及注意事项,包含完整代码案例。重点讲解继承规则:子类作为泛型类需保持标识一致,非泛型类需明确父类具体类型。 泛型方法:与泛型类解耦,方法级别定义类型参数,调用时指定类型,提高灵活性。 全文提供可直接运行的代码示例,涵盖类

XXJ0817的博客 719

Java 泛型(Generic)完整使用指南

泛型让类型变成参数,提高复用性与安全性;编译期有效,运行时擦除;extends 只读,super 可写;

JAVA爱好者的专栏 298
上一篇: 产品issue 诊断:Java CPU/Memory- Caused by JAX-WS Client
下一篇: Happy Apache Cassandra 1: Setup
FireCoder
博客等级 码龄17年 65粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FireCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值