gpt4 book ai didi

kotlin - Kotlin 中的静态数据

转载 作者:IT老高 更新时间:2023-10-28 13:28:25 31 4
gpt4 key购买 nike

请告诉我,这个例子有什么不同(在 Java 方面):

  1. object DefaultValues {
    val FILES_TO_DOWNLOAD = 100
    }

    class DefaultValues {
    companion object {
    val FILES_TO_DOWNLOAD = 100
    }
    }
  2. 没有类或对象包装器:

    const val DEFAULT_FILES_TO_DOWNLOAD = 100

    val DEFAULT_FILES_TO_DOWNLOAD = 100

真正的定义方式是什么?:

public static final int FILES_TO_DOWNLOAD = 100

最佳答案

您可以使用 Kotlin bytecode viewer找出这些选项被编译成什么。

对于 Kotlin 1.0.2,编译后的字节码表明

  1. val 属性在 objectcompanion object 被编译成一个 private static final 字段里面类(class):

     // access flags 0x1A
    private final static I FILES_TO_DOWNLOAD = 100

    还有一个getter,在引用属性时调用:

     // access flags 0x1019
    public final static synthetic access$getFILES_TO_DOWNLOAD$cp()I

    在 Java 中,getter 可以分别称为 DefaultValues.INSTANCE.getFILES_TO_DOWNLOAD()DefaultValues.Companion.getFILES_TO_DOWNLOAD()

  2. Non-const 顶级属性编译为与 (1) 相同,唯一的区别是字段和 getter 放在 FilenameKt 中 类。

    但是顶层 const val 被编译成 public static final 字段:

    // access flags 0x19
    public final static I DEFAULT_FILES_TO_DOWNLOAD = 100

    当在对象中声明 const val 时,将产生相同的 public static final 字段。此外,如果添加 @JvmField,您可以获得相同的结果字节码。 (1)中声明的属性的注释。


最后,您可以在 object 中使用 const@JvmField 定义 public static final 字段或在顶层。

关于kotlin - Kotlin 中的静态数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37482378/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com