为什么我不能从java端创建Kotlin对象?
我正在研究Kotlin与java的互操作 我找不到这种事情的答案。我有一个来自kotlin的对象:为什么我不能从java端创建Kotlin对象?,java,kotlin,Java,Kotlin,我正在研究Kotlin与java的互操作 我找不到这种事情的答案。我有一个来自kotlin的对象: object Test { fun main(args: Array<String>) { } } 问题是:为什么当我尝试创建一个对象时,我会看到测试具有私有访问权限的错误?反编译代码中没有私有构造函数 无法创建对象的实例。这就是Kotlin定义单例的方式。如果希望能够实例化它,则必须将其声明为普通类 如果您确实希望它是一个单实例,但希望它是Java端的单实例,我想
object Test {
fun main(args: Array<String>) {
}
}
问题是:为什么当我尝试创建一个对象时,我会看到测试具有私有访问权限的错误?反编译代码中没有私有构造函数 无法创建对象的实例。这就是Kotlin定义单例的方式。如果希望能够实例化它,则必须将其声明为普通类
如果您确实希望它是一个单实例,但希望它是Java端的单实例,我想您可以将它引用为Test.instance。我看到了带有javap-p Test的私有构造函数。我猜你的反编译器不包括私人成员?谢谢你的回答!我只是想知道是什么阻止了创造?我在反编译的代码中看不到任何东西。我不完全确定技术原因。也许反编译器有限制,但构造函数实际上是私有的。我所知道的是,如果你可以从java方面创建实例,那将会破坏单体合同,带来不愉快的后果。
public final class Test {
public static final Test INSTANCE;
public final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
}
static {
Test var0 = new Test();
INSTANCE = var0;
}
}