【问题标题】:What's the proper way to create global constants in Kotlin?在 Kotlin 中创建全局常量的正确方法是什么?
【发布时间】:2019-05-04 21:25:55
【问题描述】:

我想知道在 Kotlin 中创建全局常量的最佳方法是什么。在 Java 中,我们会使用一个包含常量的类,我们只需要导入这个类来访问所有常量。但在 Kotlin 中,有两种主要方式可以做到这一点:

  1. 您可以创建一个包含所有常量的对象:

    对象常量{ const val CONST_1 = "foo" const val CONST_2 = "酒吧" const val CONST_3 = "toto" }

但这不是推荐的方式,正如其中一位语言开发人员所说: https://discuss.kotlinlang.org/t/best-practices-for-top-level-declarations/2198/3

  1. 第二种方法是使用顶级声明,在我看来这不是最好的方法,因为您拥有的常量越多,您的 IDE 将使用您的常量名称自动完成您的代码...而您必须一一导入每个常量才能使用它们。

我想知道是否有更好的解决方案。我不想让我的 IDE 充斥着数百个顶级声明、大量导入,但显然不推荐使用“对象”方式。

那我该怎么办?

感谢您的帮助

【问题讨论】:

  • 您链接到的文章给出了答案:建议的做法是永远不要使用对象来创建命名空间,并且尽可能始终使用顶级声明。。如果你有大量的导入,这可能意味着你在一个文件中做的太多了。如果导入真的让您感到困扰,星号导入会有所帮助(但我从不输入它们,因为 IDE 会为我做这件事,所以我在这里并没有真正看到问题)。
  • 正如 yole(在您链接的讨论中)所建议的那样,您可以使用包含顶级声明的单个文件创建一个包,例如 com.example.android.constants,然后您可以将这些常量导入为 import com.example.android.constants.* 而不是逐个。无论如何,我个人使用object 声明。只是想指出有一种干净的方式(用单个文件打包)

标签: kotlin constants


【解决方案1】:

第二种方式是首选,正如你自己所说的那样。

而且您不必一一导入常量,因为您可以导入包含它们的整个包。

第一种方法也没有什么大问题。尽量避免将它们作为伴生对象。

【讨论】:

  • 我不知道如何导入整个包,无法识别我的常量,并且导入标记为未使用... 编辑:我只是添加“package toto.foo. bar" 在我的 constants.kt 文件中,然后我导入了整个包(其中只包含我的常量文件。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
相关资源
最近更新 更多