为什么不使用枚举?

时间:2019-04-14 00:01:52

标签: java enums flags

我已经使用了许多Java库/ API,并且注意到static final到处都有使用,例如在Android中。

这是为什么?我知道您可以快速|一起标记,这很有用,但您也可以使用EnumSet

我在使用android时遇到的另一个问题是存在大量未标记的标志,使用枚举会更干净。 For example

然后,您也不能像使用static final int s一样混淆一个类中的一组枚举

1 个答案:

答案 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。那似乎是您应该使用的而不是枚举。