【问题标题】:Are Enum classes in Kotlin "expensive" for Android as in Java?Kotlin 中的枚举类对于 Android 来说是否像 Java 一样“昂贵”?
【发布时间】:2019-02-26 19:34:23
【问题描述】:
  • 对于 Android 来说,Kotlin 中的 Enum 类与 Java 一样“昂贵”吗?
  • 在 Kotlin 中仍然可以使用 @IntDefs@StringDefs 吗?

当我将 Kotlin Enum 类反编译为 Java 类时,仍然在低级使用 Java Enum,不建议在 Android 开发中使用,这让我想到了这一点。

【问题讨论】:

  • Kotlin 在与 Java 相同的 JVM 上运行并编译为类似的字节码,所以我无法想象 Kotlin 中的枚举与 Java 中的枚举有什么不同。
  • 话虽如此,从你的 Android 代码中消除枚举属于微优化的范畴,这意味着除非你的应用程序很大并且你知道内存占用会成为一个问题,否则它是不值得大惊小怪。此外,无论如何,您真正需要做的唯一一件事就是配置 ProGuard 以在编译时将您的枚举转换为整数常量。
  • @Abion47 我不知道 ProGuard 可以做到这一点!

标签: java android kotlin enums


【解决方案1】:
  1. 对于 Android 来说,Kotlin 中的 Enum 类和 Java 一样“昂贵”吗? 可能。我怀疑 kotlin 是否能够做 java 做不到的任何优化。
  2. 在 Kotlin 中仍然可以使用 @IntDefs 或 @StringDefs 吗? - 不是真的。这是一个两极分化的主题,Android 世界中的许多人(包括我)认为使用枚举应该是首选方式。我鼓励您阅读以下链接以获得更好的想法。

Twitter thread by Jake Wharton

An article by Diane Hackborn and the comments

Somwhat witty reddit thread talking about optimization of enums and such

Jake Wharton 的以下回答很有趣。

lint 是否支持 kotlin 类型定义? (Kotlin 的 Lint 不会完全 支持到 AS 3.1,我们仍然在 3.0)

你是说类型别名吗?如果是这样,是的。

当我进行退货时,我会收到一个详尽的 lint 警告吗 when(intDef) { .. } 并意外省略了其中一种可能 类型?

这里总是需要一个 else 。不确定棉绒警告 不过。

AS 有没有意图(alt + enter 快速添加所有变体 intDef?

是的。

就像现在一样,我们正在讨论何时发布功能,而不是发布功能 应该使用这个微优化!

自 2012 年左右以来的整个枚举对话的总结!

我还想知道是否每个实现都是一个密封类 对象比枚举有一些性能提升

没有。它实际上与枚举完全相同。

【讨论】:

  • 我希望“一个密封的类,其中每个实现都是一个对象”如果有的话会更糟(更多的类要加载并保存在内存中)。
  • 真的,我们到处都在使用它:)
  • So.. 在 Kotlin 中,在 enum 和 @IntDef/@StringDef 之间进行选择,您更喜欢使用 Enums 对吗?
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
相关资源
最近更新 更多