【问题标题】:Why aren't enums used?为什么不使用枚举?
【发布时间】:2019-04-14 00:01:52
【问题描述】:

我使用了很多 Java 库/API,并注意到 static final 无处不在,例如在 Android 中。

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

另一个我特别是在 android 上遇到的问题是存在大量未限定范围的标志,使用枚举会更清晰。 For example

您也不能像 static final ints 那样将一个类中的一组枚举与另一个类混淆

【问题讨论】:

标签: java enums flags


【解决方案1】:

我没有找到Android项目的官方说法,但原因很可能是:性能,特别是内存使用情况。

枚举(因为它们是 Java 类)比整数常量需要更多的内存。甚至官方的 Android 文档(曾经)也警告不要使用它们:

例如,枚举通常需要两倍以上的内存 静态常量。您应该严格避免在 Android 上使用枚举。

Android 开发者文档,“Manage Your App's Memory”,截至 2017 年 1 月

有趣的是,current version of this page(截至 2019 年 4 月)不再提及枚举。也许今天的问题不那么重要了。


请注意,Android SDK 提供了枚举的替代方案,它还为您提供了一定程度的编译时安全性:annotation @IntDef。这似乎是您应该使用的而不是枚举。

【讨论】:

  • 我很难相信很多应用程序开发人员在历史上的任何时候都阅读过该文档。不过很有趣
  • @DarrenForsythe:我当然希望应用程序开发人员阅读官方文档,特别是指南(不是那么长)。但是,是的,很多人可能只是蒙混过关。此外,如果您的应用程序在目标受众中表现良好,通常无需担心性能(过早的优化等等......)。无论如何,这个问题是关于 SDK 本身的,我当然希望 Android SDK 的开发者阅读他们自己的文档。
  • 这个问题不仅仅与安卓有关。我使用过其他包含相同用法的库,但 android 是最著名的。
  • @Tobiq:评论不是该信息的地方;请编辑您的问题以表明这一点。目前,这个问题有点不清楚是专门询问 Android 还是一般性。
  • 这个问题从来没有暗示它完全是关于 android 的。这就是为什么我在你的帖子上留下这条评论。正如我所说,我以android为例,因为很多人都熟悉这个案例。但是问题的第一行说I've used quite a few Java libraries / APIs and noticed static final's are used everywhere
猜你喜欢
  • 2018-10-25
  • 1970-01-01
  • 2011-06-16
  • 2011-10-22
  • 2019-10-23
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多