第3章 · 高级特性的暗面 章节摘要:异常处理、泛型、注解反射、Stream——这些"高级特性"各自都有一类标志性事故:异常被静默吞掉让排错变成猜谜;泛型擦除让运行时的类型假设崩塌;反射在框架里威力巨大、在热点路径上开销刺眼;Stream 的惰性求值让副作用延迟到意想不到的时刻。本章逐个拆解。 学习目标 识别四类坏味道的异常处理(空 catch、catch 后仅打日志继续、finally 吞异常、异常当流程控制) 说清类型擦除的规则与它导致的三个运行时后果 解释反射的性能构成,掌握框架中"反射一次、缓存复用"的模式 预判 Stream 中惰性求值、复用与副作用三类陷阱 核心概念速览 特性越"聪明",出错时的表现越反直觉——高级特性的暗面都在省掉的代码里。 子章节导航 3.
章节摘要:异常处理、泛型、注解反射、Stream——这些"高级特性"各自都有一类标志性事故:异常被静默吞掉让排错变成猜谜;泛型擦除让运行时的类型假设崩塌;反射在框架里威力巨大、在热点路径上开销刺眼;Stream 的惰性求值让副作用延迟到意想不到的时刻。本章逐个拆解。
特性越"聪明",出错时的表现越反直觉——高级特性的暗面都在省掉的代码里。
一个 catch (Exception e) {} 让支付回调丢了三天,日志干净得像没发生过任何事。
编译期岁月静好,运行时 ClassCastException 从一个看似不可能的位置冒出来。
同一个接口,压测 QPS 差三倍,差价全在每次请求里重复做的反射查找上。
一段"只是换个写法"的 Stream 重构,把副作用挪到了关闭的资源上。
四个特性共享一条主线:它们都在"编译期/声明期"隐藏信息,事故发生在"运行期"信息对不上的时刻。
特性 隐藏了什么 运行期反噬 ---------- ------------------- ---------------------- 异常处理 失败路径 吞异常 → 排错无日志 泛型 类型参数 擦除 → CCE 位置诡异 反射 直接调用的字形码 开销 → 热点 QPS 塌 Stream 执行时机 惰性 → 副作用迟到