news 2026/6/9 17:27:11

Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 泛型中的通配符 T,E,K,V,?有去搞清楚吗?

Java 泛型中的 T、E、K、V、?到底啥意思?

——2025 年了,还在懵?看完这张表直接秒懂,再也不被面试官吊打

符号官方/社区约定含义最常见出现场景真实项目里谁在用(2025 年真实案例)能不能随便换?
TType(任意类型)类泛型定义最通用写法class Cache<T>
public <T> T get(String key)
99% 的自定义泛型类/方法
EElement(集合元素) 集合框架专用List<E>Set<E>Map.Entry<K,V>JDK 源码、所有集合类只能用于集合相关,换了会被打
KKey(键) Map 的 keyMap<K,V>Cache<K,V>所有 Map、缓存、配置中心只能表示 key,换了就乱套
VValue(值) Map 的 valueMap<K,V>Result<V>所有返回值、缓存 value同上
?Unknown(未知类型) 通配符,表示“任意类型”List<?>Comparator<? super T>工具类、兼容老代码、泛型擦除场景不能在定义泛型时用,只能用在“使用”时
NNumber(数字) 数字相关List<N extends Number>数字工具类很少用
RReturn Type(返回值类型) 函数式编程常用<R> R map(Function<T,R> mapper)Stream、Optional、CompletableFuture越来越流行
SU第二、第三个类型参数 多泛型参数时用<S,U> BiFunction<T,S,U>函数式接口、复杂工具类很少见

2025 年真实项目写法排行(大厂规范)

排名写法示例谁在用?为什么这么写?
1public class Result<T>所有中大型项目返回包装类T 代表任意业务数据
2public interface Repository<T, ID>Spring Data JPA 规范T=实体,ID=主键类型
3Map<String, Object>99% 的项目(虽然不规范)懒得定义 VO
4PageResult<List<T>>所有分页接口外层是包装,内层是具体类型
5<T> T getBean(Class<T> clazz)Spring 工具类返回值类型由调用方决定
6List<? extends User>协变:只能读,不能加PECS 原则
7List<? super Admin>逆变:只能写,不能读生产者用 extends,消费者用 super

面试官最爱问的 5 个灵魂问题 + 标准答案

问题标准答案(背下来)
T 和 ? 的区别?T 是类型占位符,必须在定义时声明;? 是通配符,使用时才出现,表示未知类型,不能加元素(只能 get)
为什么 Map 用 K,V 而不是 T?因为有明确语义:Key 和 Value,阅读性强,IDE 提示更友好
List<? extends Animal>能 add(null) 吗?能 add(null),但不能 add 任何 Animal 子类,因为编译器不知道具体类型
Comparator<? super T>是什么意思?比较器可以接受 T 或 T 的父类,用于逆变,经典例子:Collections.sort()
为什么 Spring 用 里不写类型?泛型推导(Diamond Operator),JDK7+ 特性,编译器自动推断

2025 年最正确的写法(直接抄作业)

// 推荐:语义清晰publicclassCache<K,V>{...}publicclassResult<T>process(Tinput){...}public<R>PageResult<R>query(PageQueryquery,Class<R>clazz){...}// 不推荐:虽然能跑,但会被架构师打publicclassCache<T,V>{...}// K 改成 T?别闹public<T>TdoSomething(){...}// 随便用 T,阅读者一脸懵List<?>list=newArrayList<>();// 完全不知道里面是什么

终极结论(2025 年面试/写代码必背)

“T = Type(万能)
E = Element(集合专属)
K V = Key Value(Map 专属)
? = 不知道,但肯定是某种类型(通配符)

记住这句口诀:
“定义用 T,集合 E,Map 永远 K 和 V,读多写少 extends,写多读少 super,啥也不知道问号 ?”

你现在项目里,有没有把 Map 写成 Map<T, V> 的?
敢不敢贴出来让我帮你改成 K,V,顺便升个级?来!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 18:47:08

嵌入式开发革命:PlatformIO Core自动化构建实战指南

嵌入式开发革命&#xff1a;PlatformIO Core自动化构建实战指南 【免费下载链接】platformio-core Your Gateway to Embedded Software Development Excellence :alien: 项目地址: https://gitcode.com/gh_mirrors/pl/platformio-core 想象一下&#xff0c;你正在开发一…

作者头像 李华
网站建设 2026/6/9 17:21:10

美团优惠券自动化管理终极指南:Python脚本帮你轻松省钱

美团优惠券自动化管理终极指南&#xff1a;Python脚本帮你轻松省钱 【免费下载链接】meituan-shenquan 美团 天天神券 地区活动 自动化脚本 项目地址: https://gitcode.com/gh_mirrors/me/meituan-shenquan 想要每天自动领取美团优惠券却不想手动操作&#xff1f;这款开…

作者头像 李华
网站建设 2026/6/9 2:07:26

AMD Ryzen 电源管理终极指南:RyzenAdj 工具快速上手

AMD Ryzen 电源管理终极指南&#xff1a;RyzenAdj 工具快速上手 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj 你是否感觉你的AMD Ryzen笔记本性能没有完全释放&#xff1f;或者电…

作者头像 李华
网站建设 2026/6/8 20:03:37

给初学者的2>1图解指南:从困惑到精通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 生成一个交互式学习教程&#xff0c;包含&#xff1a;1) 文件描述符0/1/2的动画图示 2) 2>&1的逐步分解演示 3) 5个难度递增的练习任务 4) 实时反馈系统。要求使用HTMLJS实现…

作者头像 李华
网站建设 2026/6/8 19:47:09

防勒索先防DDoS:高防CDN阻断流量型攻击,守住企业钱包

高防CDN的核心防护机制高防CDN通过分布式节点和智能流量清洗技术&#xff0c;抵御大规模DDoS攻击。其防护机制包括&#xff1a;流量调度与分流&#xff1a;将攻击流量分散至多个边缘节点&#xff0c;避免单点过载。实时清洗过滤&#xff1a;识别异常流量&#xff08;如SYN Floo…

作者头像 李华
网站建设 2026/6/8 19:40:50

40亿参数改写行业规则:Qwen3-4B如何让中小企业实现AI自由

40亿参数改写行业规则&#xff1a;Qwen3-4B如何让中小企业实现AI自由 【免费下载链接】Qwen3-4B Qwen3-4B&#xff0c;新一代大型语言模型&#xff0c;集稠密和混合专家&#xff08;MoE&#xff09;模型于一体。突破性提升推理、指令遵循、代理能力及多语言支持&#xff0c;自如…

作者头像 李华