android - Kotlin:const val 与 val

我理解在 Kotlin 中 const val 用于声明常量,而 val 用于只读属性。但是,我想知道在以下情况下,哪个更适合使用。

假设我有一个 fragment 需要一个用于 saveInstanceStaterestoreInstanceState 的 key 。我想知道以下 2 个选项中哪一个更好:

选项 1:

class MyFragment {
    private val MY_KEY = "my_key"
    ...
}

选项 2:

private const val MY_KEY = "my_key" // declared in the same file.

class MyFragment {
    ...
}

我更喜欢#option 2,因为它清楚地表明 MY_KEY 是一个常量,并且值是在编译时确定的。但是,由于它是在顶层声明的,因此需要在编译的 java 代码中创建一个类,即 MyFragmentKt(假设文件名为 MyFragment.kt)。在#option 1 中,不会生成额外的类,虽然 MY_KEY 的值将在运行时分配而不是常量,但在这种特定情况下它的使用方式没有区别。

因此,虽然我个人更喜欢#option 2,但我的分析让我认为#option 1 即使不是更好,也不会更糟。我只是想知道其他开发人员如何看待这一点,以及#option 2 是否还有其他我没有想到的好处。谢谢。

最佳答案

每次编写(非内联)lambda 表达式时,您就创建了另一个类。与此相比,创建一个单独的类来保存顶级声明似乎微不足道。

此外,如果您在顶层拥有的只是一个常量声明,它将被内联到每个使用站点(按规范),因此拥有的类本身将变得未被引用,因此可以通过 ProGuard 的最小化来定位。它很可能不会出现在您的正式版 APK 中。

https://stackoverflow.com/questions/48661282/

相关文章:

android - 带有 Kotlin 的 Android 中的 HTTP 请求

android - 在库模块中使用 Kotlin,而不在 app 模块中使用它

java - Kotlin 泛型 Array 结果为 "Cannot use T as a r

java - Kotlin 中的私有(private)构造函数

list - Kotlin - 创建具有重复元素的可变列表

parallel-processing - Kotlin 集合的并行操作?

kotlin - 如何获取给定密封类的所有子类?

kotlin - 如何组织 Kotlin 扩展方法

gradle - 使用Gradle Kotlin DSL在Gradle中进行样板项目配置

kotlin - 如何使用 toString 扩展数据类