Загрузить класс из файла сценария kotlin в Java - PullRequest
0 голосов
/ 31 мая 2018

Groovy имеет GroovyClassLoader, с помощью которого класс groovy может быть загружен в ваше Java-приложение с помощью GroovyClassLoader.parseClass(String script), а затем создан позднее и его метод вызывается.

Есть ли способ сделать этос файлами сценариев kotlin (.kts)?

Я знаю, что могу использовать jsr223 для оценки файла сценария с ScriptEngine.eval(String script), который использует KotlinJsr223JvmLocalScriptEngineFactory, однако вызывая eval вместо сценария, который является просто объявлением класса,возвращает ноль, и я не могу получить доступ к этому классу.

Я добавил правильные зависимости, и фабрика механизма сценариев kotlin правильно загружена (я вижу это в результате new ScriptEngineManager().getEngineFactories()), я просто получаю ноль какрезультат оценки.Предполагая, что это потому, что сам скрипт ничего не возвращает, просто определите класс.Вот как выглядит файл скрипта, который я пытаюсь загрузить:

package scripts

import com.example.SomeJavaInterface
import com.example.SomeArg
import com.example.SomeReturnValue

class TestScript : SomeJavaInterface {
    override fun someMethod(SomeArg arg): SomeReturnValue {
        return SomeReturnValue()
    }
}

Я использую kotlin-stdlib, kotlin-compiler и kotlin-script-util версии 1.2.41.

Разве это не достижимо с помощью сценариев kotlin?

1 Ответ

0 голосов
/ 15 января 2019

Вы можете вернуть сам класс из скрипта.Например, последняя строка вашего скрипта может быть TestScript::class.Это дает вам KClass, который вы можете затем создать.Чтобы привести пример из реальной жизни, вы можете увидеть, как я создаю экземпляр класса, который я получаю из скрипта здесь .

...