电话
400 9058 355
Java集合类默认支持泛型但不强制使用,JDK 5起泛型为可选语法糖;不加泛型会导致运行时ClassCastException,而加泛型可在编译期捕获类型错误并自动转型。
Java集合框架(如 ArrayList、HashMap)在底层是基于 Object 实现的,编译期不做类型检查。不写泛型时,集合能存任何类型,但运行时可能抛出 ClassCastException —— 这不是“不支持泛型”,而是“不强制使用泛型”。从 JDK 5 开始,泛型是可选语法糖,但跳过它等于放弃编译期类型保护。
以下代码能通过编译,但运行时崩溃:
ArrayList list = new ArrayList();
list.add("hello");
list.add(123);
String s = (String) list.get(1); // ClassCastException: Integer cannot be cast to String
list.get(1) 实际返回的是 Integer
Unchecked cast
泛型在编译期擦除,但编译器会插入隐式类型检查和自动转型:
ArrayListlist = new ArrayList<>(); list.add("hello"); list.add(123); // 编译错误:add(String) in ArrayList cannot be applied to (int)
list.get(0) 的返回类型被推断为 String,无需手动强转ArrayList)接收泛型对象,会触发 Unchecked assignment 警告ArrayList 不合法),必须用包装类(Integer)运行时无法获取泛

new T[] 非法:泛型类型在运行时不存在,只能用 (T[]) new Object[size] 或改用 ArrayList
instanceof List 编译失败:擦除后只剩 List,只能写成 instanceof List
field.getGenericType() 可拿到 ParameterizedType,但仅限于字段/方法签名中显式声明的泛型,不适用于局部变量泛型的安全性完全依赖编译期——一旦绕过(比如用原始类型、反射、序列化反解),类型约束就失效了。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...