9
我有一种我认为很常见的情况。我有一个Java枚举:Android中的安全枚举自定义属性
public enum Flavour { CHOCOLATE, STRAWBERRY }
我在attrs.xml定义自定义属性:
<attr name="flavour">
<enum name="chocolate" value="0" />
<enum name="strawberry" value="1" />
</attr>
但这种感觉真的很脆弱。它依靠我手动从属性映射到枚举正确。
如果有人在“enum Flavor”的末尾添加了“SARDINE”,那么它显然不会自动添加到属性定义中。这很公平。
但更糟糕的是,如果有人在枚举中添加了“SARDINE”,它将打破使用“草莓”的xml布局。
人们如何克服这一点?我考虑过使用字符串(并使用Flavour.valueOf()
),但我希望可能有一个更清洁的解决方案。
嗯是的,我在我的问题中提到过这种方法作为可能的解决方法,但它放弃了首先使用自定义属性的所有优点。 随着你的实现,如果有人将值设置为“choclate”,那么它将在运行时神秘地设置为STRAWBERRY。 另一个实现可能会针对不匹配的值抛出异常,但这是运行时检查,而自定义属性会为您提供编译时检查。 – Martin