Enum

基本信息

属性 值
路径 mrtjp.core.util.Enum
类型 trait
源码 src/main/scala/mrtjp/core/util/Enum.scala

Scala 侧的「Java enum 替代品」:用 trait + 内部类实现可扩展的枚举, 并附带按位集合 ValSet 支持集合运算。

结构

成员 说明
type EnumVal <: Value 枚举值类型,由实现方指定
values 当前所有值(Vector[EnumVal])
Value 枚举值基类;final val ordinal = addEnumVal(getThis),构造时自动登记
Value.name 需实现的名字
Value.equals 同一 outer + 同 ordinal 视为相等
Value.hashCode 31 * (getClass.## + name.## + ordinal)
Value.compare 按 ordinal 比较
Value.+ / ++ 构造 ValSet
Value.until(v) / to(v) 构造 ordinal 区间集合
ValSet 基于 immutable.BitSet 的有序集合
isDefinedAt(idx) / apply(idx) 越界时 apply 返回 null(不是抛异常)

缺陷

  1. apply(ordinal) 越界时返回 null.asInstanceOf[EnumVal] ——静默返回 null, 后续访问会 NPE 且堆栈难以定位。
  2. ValSet.keysIteratorFrom(start) 直接 throw new NotImplementedError("Please report this crash") —— 任何基于 keysIteratorFrom 的 SortedSet 操作都会崩。

相关条目