有没有办法在Kotlin中设置一个私有文件常量
假设我有一个Utils.kt文件,它只包含一些实用函数,没有类,没有对象。假设这些函数使用一些公共的常数值集 所以我做了这样的事情:有没有办法在Kotlin中设置一个私有文件常量,kotlin,Kotlin,假设我有一个Utils.kt文件,它只包含一些实用函数,没有类,没有对象。假设这些函数使用一些公共的常数值集 所以我做了这样的事情: package myapp private val CONST1 = 1 private val CONST2 = 2 public fun function1() {} public fun function2() {} 不幸的是,Kotlin将私有视为“可供整个软件包使用”。 因此,CONST1和CONST2可用于同一包中的所有文件。 隔离它们的唯一方法
package myapp
private val CONST1 = 1
private val CONST2 = 2
public fun function1() {}
public fun function2() {}
不幸的是,Kotlin将私有视为“可供整个软件包使用”。
因此,CONST1和CONST2可用于同一包中的所有文件。
隔离它们的唯一方法是将此文件移动到单独的包中
但是,如果我有几个这样的实用程序文件,每个文件都有自己的私有常量集,该怎么办呢。然后,我只有两个选择:将它们移动到一个唯一的包中,或者放弃,让它们中的常量在任何地方都可以访问
无论哪种方式都会造成混乱
有什么选择或建议吗
(upd:事实上,我必须说这是在Kotlin中困扰我的罕见事情之一-无法使某些实体成为本地文件(不使用一些语法黑客):它要么对整个包可用,要么对所有人都可用)
UPD:这个问题现在已经过时了(请参见接受的答案)具有
私有可见性的顶级声明仅在声明它们的文件中可见
(原始答案,当被问到这个问题时有效:Kotlin没有任何文件本地范围的概念,据我所知,没有计划引入它。如果您不喜欢包范围(为什么?),您可以创建一个对象
来封装函数和它们使用的私有常量。我不喜欢包的作用域,因为我有很多文件局部变量,它们会使所有的完成弹出窗口变得杂乱无章,通常我不需要它们随处可见。我知道我可以使用对象
,但这看起来更像一个黑客…在Kotlin中,包结构不必与目录结构相对应,因此您可以为每个文件设置一个不同的包,而无需更改项目中的文件结构。是的,注意到了,感觉很不寻常。这是推荐的方法吗?实际上,我对如何组织我的Kotlin p感到有点困惑项目中要记住所有这些东西:默认的包范围,每个文件的任意包名。我真的错过了Kotlin作者的一些最佳实践或建议。Java在这里更严格,我觉得这带来了一些秩序……推荐的方法是遵循Java约定,因为这是允许您自由混合Java和d Kotlin源文件位于同一个源根目录中。但是,对于纯Kotlin项目,您有更大的灵活性,每个文件都有一个唯一的包是可能的方法之一。这个答案已经过时,private
现在是顶级项的文件本地范围。@JaysonMinard接受答案的作者已经将其更新为reflect当前状态良好,然后我放弃了另一个答案,因为它不再需要了。/*kotlin编程*/