一句话结论
“是否持有外部 Coordinator 的引用” 决定了写成 static 还是非 static。
内部类 是否 static 是否独立需要外部实例 原因
`LeaderJoinAccumulator` 普通内部类 ✅ 需要 要访问外部 `Coordinator.this.joinTaskExecutor / masterService / joinReasonService` 等成员
`CandidateJoinAccumulator` 普通内部类 ✅ 需要 同样要访问外部 `Coordinator.closed` 字段以及 `joinRequestAccumulator` 等状态
`InitialJoinAccumulator` static ❌ 不需要 只抛出固定异常,不依赖外部任何字段或方法
`FollowerJoinAccumulator` static ❌ 不需要 同上,只返回固定异常,逻辑自给自足
把不需要访问外部实例的类做成 static nested class 可以:
1. 节省一个隐式 `Coordinator.this` 引用(每个实例 4/8 字节)。
2. 防止意外捕获外部实例导致生命周期延长。
3. 语义上更清晰:表明它只是一个“挂在 Coordinator 名字空间下”的工具类,而非“必须和某个 Coordinator 实例绑定”。
因此:
- 有外部依赖 → 普通内部类(隐含 `Coordinator.this`)。
- 纯静态逻辑 → static 内部类,轻量、安全、易读。


被折叠的 条评论
为什么被折叠?



