java集合框架通过泛型将类型检查提前至编译期,需声明具体类型参数、避免原始类型、合理使用通配符(? extends t用于只读,? super t用于只写)及有界类型参数(如t extends comparable)确保类型安全。

Java 集合框架结合泛型实现类型安全,核心在于把类型检查从运行时提前到编译期。只要正确声明泛型参数、避免原始类型、合理使用边界和通配符,就能在写代码时就拦住大多数类型错误,而不是等程序跑起来才崩溃。
明确声明泛型类型,禁用原始类型
所有集合变量必须带具体类型参数,不能省略或用裸类型(raw type)。
- ✅ 正确写法:List
names = new ArrayList(); —— 编译器会拒绝names.add(42) - ❌ 危险写法:List names = new ArrayList(); —— 可以存任意对象,取出来强转时容易
ClassCastException - ArrayList、HashMap 等实现类也需同步指定泛型,如
Map<integer person> idToPerson = new HashMap();</integer>
用泛型迭代和增强 for 避免手动转型
泛型让遍历过程自动保持类型信息,不再需要 cast。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- Iterator 自带类型:
Iterator<localdatetime> it = times.iterator(); LocalDateTime t = it.next();</localdatetime>—— 直接赋值,不报错 - 增强 for 更简洁:
for (File f : fileList) { System.out.println(f.getName()); }—— 编译器已知f是File类型 - 如果用了原始类型,增强 for 里拿到的仍是
Object,还得强转,失去泛型意义
合理使用通配符处理多态集合
当方法要接收不同子类型的集合时,不能硬写死某个具体类型,得靠通配符加边界控制读写权限。
- 只读场景用
? extends T:void printAll(List extends Number> nums)—— 可传List<integer></integer>或List<double></double>,但不能add() - 只写场景用
? super T:void collectInts(List super Integer> target)—— 可传List<number></number>或List<object></object>,允许add(100) - 别直接用
List>,它几乎只能调用size()、clear()这类与元素类型无关的方法
泛型方法与有界类型参数强化逻辑约束
当操作依赖元素行为(比如排序、计算),光有泛型还不够,得加上类型边界保证能调用特定方法。
- 限定为可比较类型:
<t extends comparable>> int compare(T a, T b) { return a.compareTo(b); }</t> - 限定为数值类型:
<t extends number> double sum(List<t> list) { return list.stream().mapToDouble(Number::doubleValue).sum(); }</t></t> - 边界确保编译期可调用
compareTo()或doubleValue(),传List<string></string>进去会直接编译失败
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










