Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在Kotlin中设置一个私有文件常量_Kotlin - Fatal编程技术网

有没有办法在Kotlin中设置一个私有文件常量

有没有办法在Kotlin中设置一个私有文件常量,kotlin,Kotlin,假设我有一个Utils.kt文件,它只包含一些实用函数,没有类,没有对象。假设这些函数使用一些公共的常数值集 所以我做了这样的事情: package myapp private val CONST1 = 1 private val CONST2 = 2 public fun function1() {} public fun function2() {} 不幸的是,Kotlin将私有视为“可供整个软件包使用”。 因此,CONST1和CONST2可用于同一包中的所有文件。 隔离它们的唯一方法

假设我有一个Utils.kt文件,它只包含一些实用函数,没有类,没有对象。假设这些函数使用一些公共的常数值集

所以我做了这样的事情:

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编程*/