【Elasticsearch】JoinAccumulator实现类 静态内部类与内部类 的区别

一句话结论

“是否持有外部 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 内部类,轻量、安全、易读。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值