gpt4 book ai didi

java - 从java中的kotlin脚本文件加载类

转载 作者:行者123 更新时间:2023-11-30 06:09:12 37 4
gpt4 key购买 nike

Groovy 有一个 GroovyClassLoader,可以使用 GroovyClassLoader.parseClass(String script) 将 groovy 类加载到您的 java 应用程序中,然后在稍后实例化,然后将其实例化调用的方法。

有没有办法用 kotlin 脚本文件(.kts)来做到这一点?

我知道我可以使用 jsr223 来使用 ScriptEngine.eval(String script) 评估脚本文件,该脚本文件使用 KotlinJsr223JvmLocalScriptEngineFactory ,但是通过脚本调用 eval 这只是一个类声明,返回 null,我无法访问该类。

我已经添加了正确的依赖项,并且 kotlin 脚本引擎工厂已正确加载(我可以在 new ScriptEngineManager().getEngineFactories() 的结果中看到它),我只是得到 null 作为结果的评估。假设这是因为脚本本身并没有真正返回任何内容,只是定义一个类。这就是我尝试加载的脚本文件的样子:

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 脚本实现吗?

最佳答案

您可以从脚本返回类本身。例如,脚本的最后一行可以是 TestScript::class。这将为您提供一个 KClass,然后您可以实例化它。为了给您一个真实的示例,您可以看到我如何实例化从脚本here获得的类。 .

关于java - 从java中的kotlin脚本文件加载类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50628577/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com