使用枚举作为对象ID

时间:2017-10-15 10:10:08

标签: oop enums identity haxe

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

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

  1. 不容易找到拼写错误;

  2. 没有代码完成,所以我需要记住所有ID

  3. 我正在考虑使用枚举结构作为对象ID。这应该解决所有这些问题。我想知道,使用枚举作为实体识别器是否有任何陷阱?

1 个答案:

答案 0 :(得分:4)

使用枚举作为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是实际的运行时字符串,但编译器知道预期的值,并且您可以进行严格的输入。