我可以将 Kotlin 对象INSTANCE(对于 Java 互操作)的可见性修改为internal或更低吗?
我正在编写一个库,我想要一个用 Kotlin 编写的API 文件/类,它公开一个可以从 Java 或 Kotlin 调用的函数,如下所示:
科特林:
API.function()
Run Code Online (Sandbox Code Playgroud)
爪哇:
API.function()
Run Code Online (Sandbox Code Playgroud)
我可以通过这样写来实现这一点:
科特林:
object API {
@JvmStatic
fun function() = TODO()
}
Run Code Online (Sandbox Code Playgroud)
不过,现在我也可以这样做:
爪哇:
API.function();
Run Code Online (Sandbox Code Playgroud)
为了简单起见,我想阻止这种访问,以INSTANCE将 API 界面保持在最低限度。
我可以将可见性修改为INSTANCE或internal更低吗?
这可能是不可能的,因为对API(来自 Kotlin)的任何调用都会返回对象的实例,并且该实例也应该被隐藏才能实现这一点。不过,我很好奇它是否没有受到重大黑客攻击。
使用 Java 的解决方案是用APIJava 编写:
object API {
@JvmStatic
fun function() = TODO()
}
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找用 Kotlin 编写的解决方案。