news 2026/5/1 8:32:59

Java泛型符号T、E、K、V、?总混用?5分钟彻底讲透,别再搞错了!

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java泛型符号T、E、K、V、?总混用?5分钟彻底讲透,别再搞错了!

兄弟们,你有没有这样过: 写代码时,看到别人用List<T>Map<K, V>,心里想:这T、E、K、V到底啥意思?能不能换成A、B、C??又是啥?问又不太好意思问…… 咱们直接进入主题。

1. 泛型是啥?

泛型:“类型占位符”。 比如你写个工具类,想让它既能处理String,也能处理Integer,咋办? 你总不能写两个方法吧?太麻烦! 这时候,泛型就来了。你先用个“代号”代替具体类型,等用的时候再告诉它“哦,这次是String”。

2. 那T、E、K、V是啥?有啥区别?

这些字母就是“代号”的约定写法。不是语法规定,是大家都用习惯了的规矩。 你非要写List<A>,语法也是OK的。但别人看了可能会懵。 所以,这几个代号可以看做是这几个意思:

T → Type(类型)

最最常见的,代表“任意类型”。使用场景:写一个通用方法或类,不知道具体类型。

java

体验AI代码助手

代码解读

复制代码

public class Box<T> { private T content; public void set(T t) { this.content = t; } public T get() { return content; } }

用的时候:

java

体验AI代码助手

代码解读

复制代码

Box<String> stringBox = new Box<>(); stringBox.set("你好"); Box<Integer> intBox = new Box<>(); intBox.set(100);

T就是个“占位符”,传String它就是String;传Integer它就是Integer

E → Element(元素)

一般用在集合里,表示“集合中的元素类型”。使用场景ListSet这些容器。

java

体验AI代码助手

代码解读

复制代码

public interface List<E> { boolean add(E e); E get(int index); }

JDK源码就是这么写的。E = Element,一看就知道是“里面装的东西”。

比如:

java

体验AI代码助手

代码解读

复制代码

List<String> list = new ArrayList<>(); // 这里的String,就是E

所以,ET没啥本质区别,但语义不同E强调的是“这是集合里的元素”。

K和V = Key和Value

这个最简单,专用于Map使用场景Map类、方法。

java

体验AI代码助手

代码解读

复制代码

public interface Map<K, V> { V put(K key, V value); V get(Object key); }

K = Key,V = Value。

比如:

java

体验AI代码助手

代码解读

复制代码

Map<String, Integer> map = new HashMap<>(); map.put("年龄", 18); // K是String,V是Integer

只要看到Map,基本就是K和V。

? → 通配符(问号,就是“不知道”)

这个最tricky,但其实也简单。使用场景:你不想限制类型,或者类型不重要。

比如,你写个方法,只想打印List的大小,不管里面是String还是Integer

java

体验AI代码助手

代码解读

复制代码

public void printSize(List<?> list) { System.out.println("大小:" + list.size()); }

这里的?表示任何类型都行(除了null),因为类型不确定。 但可以读,比如list.get(0),返回的是Object。

再举个例子

java

体验AI代码助手

代码解读

复制代码

List<?> list1 = new ArrayList<String>(); List<?> list2 = new ArrayList<Integer>(); // 都可以

还有一个变种:<? extends T><? super T>

  • <? extends Animal>:只要是Animal的子类都可以
  • <? super Dog>:只要是Dog的父类都可以

但日常用得少,?就是“我不关心你啥类型”。

3. 这里还有一种情况

错误写法:

java

体验AI代码助手

代码解读

复制代码

public class Container<T> { private List<T> items = new ArrayList<T>(); // 多此一举! }

正确写法:

java

体验AI代码助手

代码解读

复制代码

private List<T> items = new ArrayList<>(); // JDK7以后,<>就够了

总结

  • T:Type,通用类型,最常用
  • E:Element,集合里的元素
  • K:Key,Map的键
  • V:Value,Map的值
  • ?:问号,类型不确定
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:13:08

PostgreSql 常用聚合函数

基础准备 CREATE TEMP TABLE demo(id int, v int, t text); INSERT INTO demo VALUES(1, 10, a),(2, 20, b),(3, NULL, c);idvt110a220b3NULLc注意&#xff1a;版本基于 PG 15&#xff0c;全部自带&#xff0c;无需扩展 A. 基础统计 SELECT count(*) AS cnt, -- 3c…

作者头像 李华
网站建设 2026/4/30 18:08:36

露,信息化集成化信号采集与处理系统信息化集成化信号采集处理系统 机能生理实验系统 信息化集成化生物信号采集与处理系统

一体化生物机能实验系统核心由可移动实验平台、生物信号采集处理系统等四大功能模块构成。该系统将多项实验核心功能与管理模块进行融合&#xff0c;具体涵盖基础实验操作平台、高精度生物信号采集处理单元、附带动物体温实时监测功能的动物呼吸机&#xff0c;以及实验环境监测…

作者头像 李华
网站建设 2026/5/1 7:35:22

文件格式转换神器,牛批了

今天给大家推荐一款非常不错的文件格式转换软件&#xff0c;已经被汉化&#xff0c;没有广高、免费&#xff0c;有需要的小伙伴及时下载收藏。 FileConverter 多媒体格式转换软件 这款工具安装后没有界面&#xff0c;鼠标右键菜单中可以找到&#xff0c;包含了音频、视频、PDF…

作者头像 李华
网站建设 2026/5/1 7:35:46

宽论视角下量化与价值投资的对立统一之道

在金融投资的广阔领域中&#xff0c;宽论犹如一座灯塔&#xff0c;为投资者指引着方向。宽论中对于量化与价值投资对立统一关系的探讨&#xff0c;为我们理解和运用这两种投资策略提供了全新的视角。深入研究宽论中这一核心观点&#xff0c;对于投资者提升投资水平和盈利能力具…

作者头像 李华
网站建设 2026/3/28 13:02:57

【拯救HMI】色彩在工业HMI中的科学应用:不仅仅是“红停绿行”

颜色是HMI中最强大的视觉工具之一&#xff0c;但也是最容易被误用的。本文将深入探讨色彩心理学、可达性设计&#xff08;色盲友好&#xff09;以及如何建立一套科学、高效的色彩编码体系。色彩的心理暗示&#xff1a;红色&#xff1a; 立即引起注意&#xff0c;用于紧急停止、…

作者头像 李华
网站建设 2026/5/1 7:34:16

软件测试基本流程和方法:从入门到精通

自动化测试在现代软件开发中的崛起 随着软件行业的快速发展&#xff0c;自动化测试已从辅助工具演变为软件开发流程中不可或缺的环节。它不仅提升了测试效率&#xff0c;还显著降低了人为错误&#xff0c;尤其在持续集成/持续部署&#xff08;CI/CD&#xff09;和敏捷开发环境…

作者头像 李华