me/ 能量阈值与观察(energy)

覆盖范围

appeng.me.energy 包,2 个 .java 文件 —— me/ 下最小的子包。

实测:find me/energy -name '*.java' | wc -l = 2。

两个类

文件 行号 职责
EnergyWatcher.java 24 IEnergyWatcher 实现 + Set<Double> 语义的集合。一条「此设备关心哪些能量阈值」
EnergyThreshold.java 16 一个 (double 阈值, IEnergyWatcher 归属) 对。Comparable

为什么只有 2 个文件

me/energy/ 不是能量子系统的主体。真正的能量分配在 EnergyGridCache(me/cache/EnergyGridCache.java:50)。 本包只提供阈值触发机制:机器登记若干能量档位,跨过档位时被通知, 从而实现「低于 25% 停机」这类行为。

EnergyWatcher

方法 行号 说明
构造器 30 (EnergyGridCache cache, IEnergyWatcherHost host)
post(EnergyGridCache) 35 触发回调 —— 能量跨过阈值时由 cache 调用
getHost() 39 回到设备

⚠️ 命名陷阱:类名叫 EnergyWatcher,但它的角色更像 「阈值集合 + 回调转发器」,而 me/helpers/ 里的 IEnergyWatcherHost 才是「被通知的设备」。

⚠️ 第二个陷阱:EnergyWatcher 同时实现了集合接口 (size :44 / isEmpty :49 / contains :54 / iterator :59 / toArray :64,:69 / add :74 / remove :84 / containsAll :90 / addAll :95 等)—— 元素类型是 Double(阈值),不是 watcher 本身。 源码未声明 implements Set<Double>,但方法集是完整的 Set 契约。

EnergyThreshold

方法 行号 说明
构造器 22 (double lim, IEnergyWatcher wat)
hashCode() 34
compareTo(EnergyThreshold o) 39 按 lim 排序
getWatcher() 47

它实现 Comparable,排序依据是阈值本身,因此阈值集合可以保持有序, 跨档检查退化成相邻比较。

生命周期

两个类都不是 IGridCache,没有 5 个网格钩子。 它们由 EnergyGridCache 在 addNode / removeNode 时收集与释放。

与既有维度的关系

相关条目