-
Java Files.move 的 ATOMIC_MOVE 与 REPLACE_EXISTING 解决的是不同问题:前者约束原子移动,后者允许覆盖已存在目标。本文按 FileStore、目标状态和原子性要求拆解选择方式,并给出 AtomicMoveNotSupportedException 的处理边界。
-
Java sealed class 或 sealed interface 的分支覆盖率异常,先区分 permits 类型边界与 if/switch 真实分支,再检查 JaCoCo prepare-agent、Surefire argLine、编译版本和测试路径。
-
Java Stream 里的 filter、map 等中间操作不会立刻执行,只有终止操作真正消费流时,链上的日志和断点才会出现。本文从一段看似没有输出的代码开始,拆开惰性求值的触发边界、短路终止操作和流只能消费一次的限制,并给出可复查的调试写法。
-
用一个等待外部资源的 Java 并行任务说明 ForkJoinPool.managedBlock 的补偿线程机制、ManagedBlocker 契约与线程池关闭验收。
-
使用 Java Flight Recorder 的 RecordingFile.write 按事件类型筛选已有 recording.jfr,导出新的 JFR 文件;本文说明事件名称、多个事件白名单、类型清单和三种读取方式的选择边界。
-
Java 21 引入 SequencedMap 后,可以用统一的首尾操作和 reversed() 视图处理有明确遇见顺序的键值集合。本文用 LinkedHashMap 演示 firstEntry、lastEntry、putFirst、putLast 与倒序遍历的差异,并标出 Java 17 及更早版本的兼容边界。
-
Java Selector 的 wakeup 是一次性选择唤醒信号。本文解释提前 wakeup 后 select 仍阻塞的常见时序,说明 selectNow 如何清除唤醒效果,并给出任务队列与事件循环的稳定写法。
-
使用XMLEventReader逐事件读取XML,区分开始元素、文本片段和结束边界。原创示例通过元素栈保留直接文本,并说明命名空间、资源关闭、便捷方法和部分导入的处理边界。
-
Java Commons CSV 中,空字符串是已映射列存在但值为 "";缺失列则要结合 isMapped、isSet 和 isConsistent 判断。本文给出安全读取顺序和不规则行处理方式。
-
Java 线程池出现任务堆积时,不要只盯着活动线程数。本文用队列长度、完成任务数和拒绝策略还原排查路径,并给出可复现的状态采样代码。
-
Java HttpClient 的 BodyHandlers.ofLines 返回的是流式 Stream,读取完毕或提前停止都要明确关闭。本文从响应接收、行消费到资源释放拆开调用链,给出 try-with-resources 写法和提前终止时的边界。
-
用 Java EnumMap 保存订单状态转移规则,把合法迁移、非法迁移和默认分支放进一张可检查的状态表,避免订单流程散落在多处 if-else 中。
-
Gradle configuration cache 不复用时,先用 help 区分配置阶段和任务阶段,再根据问题报告修复 Project、监听器、外部进程和任务状态依赖;暂时无法迁移的任务只做局部 opt-out。
-
Java CompletableFuture 合并两个异步结果时,优先用 thenCombine 让两个阶段正常完成后生成新值;需要切换线程池时使用 thenCombineAsync,并区分无返回值组合、allOf、异常传播和 join 的使用边界。
-
Java Locale.forLanguageTag 适合把 BCP 47 语言标签转换为 Locale,但它遇到格式不完整的标签会截断解析,不能代替严格校验。本文对比 forLanguageTag 与 Locale.Builder.setLanguageTag 的行为,并给出服务边界上的选择方法。