Как запустить библиотеки Kotlin (распространяемые через JitPack) в файле Java?

Я разработал библиотеку Text2Summar y для Android, написанную с использованием Kotlin. Я распространяю эту библиотеку с помощью JitPack, и процесс сборки идет отлично.

Теперь в проекте Android с поддержкой Kotlin я могу импортировать классы, доступные в библиотеке. Это не относится к проекту, в котором есть только Java (без настроенного Kotlin). Здесь Android Studio просто жалуется, что не может разрешить символ Text2Summary.

Я написал всю библиотеку на Kotlin, и разработчики, не использующие Kotlin, жалуются на ту же ошибку не удается разрешить символ Text2Summary. Должен ли я просто преобразовать код Kotlin обратно в код Java или я должен сказать пользователям, что Kotlin нужно включить apply plugin 'kotlin'? Правильное объяснение тоже будет полезным.


person    schedule 12.06.2020    source источник


Ответы (1)


Я думаю, вы забыли добавить аннотацию @JvmStatic, чтобы ваш метод мог быть вызван из кода Java. Без него вы должны называть это как MyObject.Companion.method1() в Java.

Вот что вам следует добавить к своим общедоступным методам в 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()
        }
    }
}
person Seanghay    schedule 12.06.2020