有没有办法让Kotlin中的私有文件保持不变

dim*_*suz 14 kotlin

假设我有一些Utils.kt文件,它只包含一些实用程序函数,没有类,没有对象.并假设这些函数使用一些常见的常量值.

所以我这样做:

package myapp

private val CONST1 = 1
private val CONST2 = 2

public fun function1() {}
public fun function2() {}
Run Code Online (Sandbox Code Playgroud)

不幸的是,Kotlin将私人视为"可用于整个套餐".因此,CONST1和CONST2可用于同一包中的所有文件.隔离它们的唯一方法是将此文件移动到单独的包中.

但是,如果我有几个像这样的实用程序文件,每个都有自己的私有常量集.然后我只有两个选择:将它们中的每一个移动到一个独特的包中,或者放弃并从所有这些中可以访问所有它们的consts.

无论哪种方式似乎都会造成混乱.

任何选择或建议?

(更新:实际上,我必须说这是Kotlin困扰我的那些罕见的事情之一 - 无法使某些实体成为文件本地(不使用某些语法黑客):它可以用于整个包,也可以用于所有人)

UPD:这个问题现已过时(参见接受的答案)

yol*_*ole 9

具有private可见性的顶级声明仅在声明它们的文件中可见.

(原始答案,有问题的时候有效:Kotlin没有任何文件局部范围的概念,据我所知,没有计划引入它.如果你不喜欢包范围(为什么?) ,您可以创建一个object封装函数和它们使用的私有常量.

  • 这个答案已经过时了,“private”现在是顶级项目的文件本地范围。 (3认同)
  • 我不喜欢包范围,因为我倾向于有许多文件局部变量,它们使所有完成弹出窗口变得混乱,通常我不需要它们在任何地方都可见。我知道我可以使用“对象”,但这看起来更像是一种黑客...... (2认同)