使用枚举作为对象 ID

Using enums as object IDs

我目前正在做一个项目。在这个项目中,许多对象都有一个ID,用于从不同代码部分的配置文件中获取实体的属性和行为。

我使用String作为ID,很适合我,但是有一些问题:

  1. 打字不易发现;

  2. 没有代码补全,需要记住所有的ID

我正在考虑使用枚举结构作为对象 ID。这应该可以解决所有这些问题。我想知道,使用枚举作为实体标识符有什么陷阱吗?

使用枚举作为 ID 有很多陷阱:

  • 比较:你不能直接用==比较两个枚举实例,你需要使用switcha.equals(b)Type.enumEq(a,b)
  • 序列化 : As you can see, Json序列化不明显
  • 表示:每个平台的底层表示不同。

恕我直言,除此之外,主要的缺陷是如果您添加枚举项,枚举表示可能会发生变化,因为它们的表示包含它们在枚举中的索引。

因此,如果您将代码从 enum ID { Foo; Bar } 更新为 enum ID { Zero; Foo; Bar; },Foo 和 Bar 值的索引将发生变化,可能会导致意外行为。

如果您计划序列化和存储这些值,这是一个主要问题。

我认为您最好的选择是根据 https://haxe.org/manual/types-abstract-enum.html

使用 @:enum abstract

通过这种方式,您可以两全其美:您的 ID 是实际的运行时字符串,但编译器知道哪些值是预期的,并且您可以严格输入。