我目前正在制作一个项目。在这个项目中,许多对象都有一个ID,用于从不同代码部分的配置文件中获取实体的属性和行为。
我使用String作为ID,这很适合我,但是有一些问题:
不容易找到拼写错误;
没有代码完成,所以我需要记住所有ID
我正在考虑使用枚举结构作为对象ID。这应该解决所有这些问题。我想知道,使用枚举作为实体识别器是否有任何陷阱?
答案 0 :(得分:4)
使用枚举作为ID存在很多陷阱:
==
进行比较,您需要使用switch
或a.equals(b)
或Type.enumEq(a,b)
恕我直言,除了这些之外,主要的缺陷是如果添加枚举项,枚举表示可能会改变,因为它们的表示在枚举中包含它们的索引。
因此,如果您将代码从enum ID { Foo; Bar }
更新为enum ID { Zero; Foo; Bar; }
,则Foo和Bar值将更改其索引,从而可能导致意外行为。
如果您计划序列化并存储这些值,这是一个主要问题。
我认为您最好的选择是根据https://haxe.org/manual/types-abstract-enum.html
使用@:enum abstract
通过这种方式,您可以充分利用这两个方面:您的ID是实际的运行时字符串,但编译器知道预期的值,并且您可以进行严格的输入。