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(不是抛异常) |
缺陷
apply(ordinal) 越界时返回 null.asInstanceOf[EnumVal] ——静默返回 null,
后续访问会 NPE 且堆栈难以定位。
ValSet.keysIteratorFrom(start) 直接 throw new NotImplementedError("Please report this crash")
—— 任何基于 keysIteratorFrom 的 SortedSet 操作都会崩。
相关条目