【发布时间】:2020-11-06 06:55:14
【问题描述】:
我正在开发我在 Kotlin 中开发的 Android 库。我将某些类的访问修饰符保留为internal。内部类仅在 Kotlin 的该库模块中可见。如果我在应用程序中实现该库,那么它根本不可见。
但是从 Java 代码访问该库时会出现问题。如果我创建 .java 文件并键入该库的 internal 类的名称,则 IDE 会建议名称,并且它已被解析和编译,没有任何错误。
例如
库模块:
internal class LibClass {
// Fields and Methods
}
在 DemoApp 模块中实现上述库后:
应用模块
科特林:fun stuff() {
val lib = LibClass() // Error.. Not resolving
}
爪哇:
public void stuff() {
LibClass lib = new LibClass() // Successfully resolving and compiling
}
这就是问题所在。如何从 Java 中保护该类?
谢谢!
【问题讨论】:
-
这不应该是这样,在我的 IDE 中我无法编译它。你确定你是在 app 模块中访问 LibClass 吗?
-
是的,我可以从应用模块访问它。它只是在类名下方显示红色错误下划线但编译成功
-
不确定它是否可行,但可以尝试使用
@JvmName注释您的类,并为其指定一个无效的 Java 名称,例如包含空格、连字符或其他内容。 -
好的。我会试试这个,然后告诉你
-
@SaurabhThorat 我尝试使用
@JvmName,但它不起作用。仅当在.kt文件中创建顶级函数时才有效。它不适用于班级。
标签: android class kotlin internals modifier