有没有办法在 Kotlin 中拥有一个私有文件常量
Is there a way to have a private file constant in Kotlin
假设我有一些 Utils.kt 文件,其中只包含一些实用函数,没有 类,没有对象。并假设这些函数使用一些通用的常数值集。
所以我做了这样的事情:
package myapp
private val CONST1 = 1
private val CONST2 = 2
public fun function1() {}
public fun function2() {}
不幸的是,Kotlin 将 private 视为 "available to the whole package"。
因此 CONST1 和 CONST2 可用于同一包中的所有文件。
隔离它们的唯一方法是将此文件移动到单独的包中。
但是如果我有多个这样的实用程序文件,每个文件都有自己的一组 private 常量怎么办?然后我只有两个选择:将它们中的每一个都移动到一个独特的包中,或者放弃并让它们中的所有常量随处可见。
这两种方式似乎都会造成混乱。
有什么选择或建议吗?
(upd: 实际上,我必须说这是在 Kotlin 中困扰我的罕见事情之一 - 无法使某些实体成为文件本地的(不使用一些语法 hacks):它要么对整个包可用,要么对所有人都可用)
UPD: 这个问题现在已经过时了(见已接受的答案)
具有 private
可见性的顶级声明仅在声明它们的文件中可见。
(原答案,提问时有效:Kotlin 没有任何文件本地作用域的概念,据我所知,没有计划引入它。如果你不喜欢 package范围(为什么?),您可以创建一个 object
封装函数和它们使用的私有常量。
假设我有一些 Utils.kt 文件,其中只包含一些实用函数,没有 类,没有对象。并假设这些函数使用一些通用的常数值集。
所以我做了这样的事情:
package myapp
private val CONST1 = 1
private val CONST2 = 2
public fun function1() {}
public fun function2() {}
不幸的是,Kotlin 将 private 视为 "available to the whole package"。 因此 CONST1 和 CONST2 可用于同一包中的所有文件。 隔离它们的唯一方法是将此文件移动到单独的包中。
但是如果我有多个这样的实用程序文件,每个文件都有自己的一组 private 常量怎么办?然后我只有两个选择:将它们中的每一个都移动到一个独特的包中,或者放弃并让它们中的所有常量随处可见。
这两种方式似乎都会造成混乱。
有什么选择或建议吗?
(upd: 实际上,我必须说这是在 Kotlin 中困扰我的罕见事情之一 - 无法使某些实体成为文件本地的(不使用一些语法 hacks):它要么对整个包可用,要么对所有人都可用)
UPD: 这个问题现在已经过时了(见已接受的答案)
具有 private
可见性的顶级声明仅在声明它们的文件中可见。
(原答案,提问时有效:Kotlin 没有任何文件本地作用域的概念,据我所知,没有计划引入它。如果你不喜欢 package范围(为什么?),您可以创建一个 object
封装函数和它们使用的私有常量。