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