我已经使用了许多Java库/ API,并且注意到static final
到处都有使用,例如在Android中。
这是为什么?我知道您可以快速|
一起标记,这很有用,但您也可以使用EnumSet
。
我在使用android时遇到的另一个问题是存在大量未标记的标志,使用枚举会更干净。 For example
然后,您也不能像使用static final int
s一样混淆一个类中的一组枚举
答案 0 :(得分:3)
我还没有找到Android项目的官方声明,但是原因很可能是:性能,特别是内存使用情况。
枚举(因为它们是Java类)比整数常量需要更多的内存。甚至(曾经)的官方Android文档也警告不要使用它们:
例如,枚举通常需要的内存是内存的两倍多 静态常数。您应严格避免在Android上使用枚举。
截至2017年1月的Android开发者文档“ Manage Your App's Memory”
足够有趣的是,current version of this page(截至2019年4月)不再提及枚举。也许今天这个问题不那么重要了。
请注意,Android SDK提供了枚举的替代方法,它还为您提供了一定程度的编译时安全性:annotation @IntDef
。那似乎是您应该使用的而不是枚举。