【问题标题】:How do I run Kotlin libraries ( distributed via JitPack ) in a Java file?如何在 Java 文件中运行 Kotlin 库(通过 JitPack 分发)?
【发布时间】:2020-06-12 08:05:05
【问题描述】:
我为 Android 开发了一个库 Text2Summary,它是使用 Kotlin 编写的。我正在使用JitPack 分发这个库,构建过程非常顺利。
现在,在启用 Kotlin 的 Android 项目中,我可以导入库中可用的类。在只有 Java(未配置 Kotlin)的项目中,情况并非如此。在这里,Android Studio 只是抱怨 无法解析符号 Text2Summary。
我已经用 Kotlin 编写了整个库,不使用 Kotlin 的开发人员抱怨同样的 cannot resolve symbol Text2Summary 错误。我应该简单地将 Kotlin 代码转换回 Java 代码,还是应该告诉用户通过 apply plugin 'kotlin' 启用 Kotlin?有效的解释也会有所帮助。
【问题讨论】:
标签:
java
android
kotlin
jitpack
【解决方案1】:
我认为您忘记添加 @JvmStatic 注释以使您的方法可以从 Java 代码中调用。没有它,您必须像 Java 中的 MyObject.Companion.method1() 一样调用它。
这是您应该添加到 companion object {} 中的公共方法的内容
class Text2Summary() {
companion object {
// Summarizes the given text.
@JvmStatic
fun summarize( text : String , compressionRate : Float ): String {
val sentences = Tokenizer.paragraphToSentence( Tokenizer.removeLineBreaks( text ) )
val tfidfSummarizer = TFIDFSummarizer()
val p1 = tfidfSummarizer.compute( text , compressionRate )
return buildString( sentences , p1 )
}
// Summarizes the given text. Note, this method should be used whe you're dealing with long texts.
// It performs the summarization on the background thread. Once the process is complete the summary is
// passed to the SummaryCallback.onSummaryProduced callback.
@JvmStatic
fun summarizeAsync( text : String , compressionRate : Float , callback : SummaryCallback ) {
SummaryTask( text , compressionRate , callback ).execute()
}
}
}