我可以将从Kotlin文件生成的类的默认构造函数设置为私有吗?

我可以将从Kotlin文件生成的类的默认构造函数设置为私有吗?,kotlin,Kotlin,如果我创建一个Kotlin文件MyTest.kt package my.test fun sayHello(): String = "Hello" 将生成一个类MyTestKt,可以从java访问它,如下所示: MyTestKt.sayHello() // Returns "Hello" MyTestKt myTestKt = new MyTestKt() // Instantiate 我想让那个构造函数私有化。可能吗?如果是,怎么做 我知道我可以使用对象创建单例,这不是我的问题。我知道我

如果我创建一个Kotlin文件
MyTest.kt

package my.test
fun sayHello(): String = "Hello"
将生成一个类
MyTestKt
,可以从java访问它,如下所示:

MyTestKt.sayHello() // Returns "Hello"
MyTestKt myTestKt = new MyTestKt() // Instantiate
我想让那个构造函数私有化。可能吗?如果是,怎么做



我知道我可以使用
对象
创建单例,这不是我的问题。我知道我可以创建一个内部有
伴生对象的类,这也不是我的问题。

您可以这样做

@file:JvmName("Utils")

package demo

fun foo() {}
class Utils private constructor()
当您尝试从Java调用Utils构造函数时,会得到一个“Utils具有私有访问权”

更新 使用私有构造函数()时,无法访问foo函数。
我认为这可能是一个设计缺陷,函数与任何类对象都没有关联。我研究了几个kotlin标准库,只找到了您想要的扩展函数。在这种情况下,例如,
CollectionKt
,它不能被实例化。

现在没有办法这样做。有趣的问题!不幸的是,我看不出有什么办法。这可能是语言devs的一个问题,如果您在文件中这样做了会发生什么:类MyTestKt private constructor(){},然后在存根类执行fun sayHello():String=“Hello”@Adam之后,使用私有构造函数创建类
MyTestKt
,但是它不包含方法
sayHello
,我也不知道谁拥有该方法。@Adam Ohhh当我尝试实际运行该应用程序时,它告诉我有一个重复的类
MyTestKt
,因此,它不是一个选项。但是好主意。。。谢谢,但这就是我在评论中说的。。。您无法访问
foo