简短问题
我能否将 Kotlin 对象的 INSTANCE
(用于 Java 交互)的可见性修改为 internal
或更低级别?
长问题
我正在编写一个库,我想要有一个 API 文件/类,使用 Kotlin 编写,它可以公开一个函数供 Java 或 Kotlin 调用,如下所示:
Kotlin:
API.function()
Java:
API.function();
我可以通过以下方式来实现这个功能:
Kotlin:
object API {
@JvmStatic
fun function() = TODO()
}
然而,现在我也可以做到这一点:
Java:
API.INSTANCE.function();
为了简化API表面,我希望阻止对INSTANCE
的访问。
我能否将INSTANCE
的可见性修改为internal
或更低?
这可能不太可能,因为任何从Kotlin调用API
都会返回对象的实例,这也应该被隐藏,以使得这种修改成为可能。然而,我很好奇是否有一些不需要大规模改动的方法可以实现。
使用Java编写API
的解决方案是一种选择:
public final class API {
private API() {
}
public static void function() {
}
}
然而,我正在寻找一种用Kotlin编写的解决方案。
object
(~单例)(也许你考虑的是一个Utilitity
类,因为这是在Java中支持此类函数的唯一方式?;-)),而是想要通过一个共同的接口访问一组函数...Linos的答案向您展示了这一点,并且它将被包装成您在Java方面感到舒适的方式... - Roland