-
Java 接口同时收到日期、带 T 的时间和带空格的时间时,可以用 DateTimeFormatterBuilder 组织可选秒数,再用多个候选格式器处理真正不同的分隔符。本文给出严格解析、parseBest 和落地边界。
-
Java Matcher 切换 Pattern 后不会自动回到输入开头。本文用紧凑示例说明 usePattern 如何保留当前位置、为什么旧分组失效,以及它与 reset、region、find(int) 的区别。
-
Java jlink 生成的是按根模块和传递依赖裁剪的自定义运行时,不是完整 JDK。本文解释为什么没有 javac、javadoc,如何用 jdeps 和 --list-modules 判断缺少项,以及怎样按需加入模块和服务绑定。
-
BigDecimal 的 equals 同时比较数值和 scale,所以 1.0 与 1.00 可能被判定为不同对象;compareTo 只比较数值。本文用金额判断、集合键和输入构造说明两者的边界。
-
Java ByteBuffer 的 duplicate() 与 slice() 都共享底层字节,但在 position、limit、capacity、mark 和字节序上有不同使用边界。本文用示例说明如何选择视图。
-
Apache Commons Collections 的 MultiValuedMap 用一个键关联一个 Collection,可按需求选择列表型或集合型实现。本文说明 put、putAll、get、asMap 的用法,以及从旧 MultiValueMap 迁移时的注意点。
-
Path.normalize 只按路径名称规则消除 . 和 ..,不会访问文件系统,也就不会检查符号链接。本文用 Java NIO 的 API 对比说明语义差异,并给出需要真实目标时的处理方式。
-
DoubleSummaryStatistics 记录 NaN 后,count 仍会计入该值,而 min、max、sum 和 average 会受到 NaN 传播影响。本文说明如何识别 NaN、选择过滤策略,并处理空对象与 combine 边界。
-
MethodHandle 的 invokeExact 失败,通常不是目标方法找错,而是调用点签名没有与句柄的 MethodType 完全一致。本文用 Java 代码说明如何定位类型差异,并选择 invoke 或 asType 完成适配。
-
Java record 的字段是 final,但可变 List 仍可能通过共享引用被外部修改。本文用 compact constructor 和 List.copyOf 处理集合防御性复制,并说明它不等于深拷贝。
-
用订单标签小项目演示 Stream mapMulti 如何发出零到少量结果,提供完整 Java 示例和预期输出,并比较 flatMap 的子流接口、Consumer 作用域与性能结论边界。
-
Java 虚拟线程出现 BLOCKED 或吞吐下降时,先区分普通等待、载体线程固定和下游资源耗尽,再按 JDK 21–23 与 JDK 24+ 的差异使用线程转储、JFR、Semaphore 和资源边界控制。
-
用 Java EnumSet.complementOf 从已选枚举值中取出同一枚举类型尚未选择的值,覆盖空集、全集、类型推断和并发访问边界。
-
JDK 26 的 JEP 530 第四次预览把基本类型带入更多模式匹配场景。本文从旧写法的分支基线出发,解释 primitive pattern、instanceof 安全转换、switch 的 case 与 when,以及 Object、包装类型和 null 的装箱边界。
-
Java Stream gatherer 的关键不只是回调数量,而是中间状态、下游短路和并行合并的边界。本文用固定窗口与无状态映射说明 initializer、integrator、finisher、Downstream.push 和 combiner 的职责。