3年前 (2021-08-08)  相关技术 |   抢沙发  604 
文章评分 0 次,平均分 0.0
[收起] 文章目录

GraalVM是Oracle的一个新的开源项目,它试图使Java虚拟机成为运行所有主要语言的通用虚拟机。在GraalVM之前,已经很少有像Scala、Closure这样的语言将JVM作为其运行时。这对于这些语言来说是非常成功的。GraalVM进一步扩展了这一思想,使得以JVM为目标变得很容易,从而使更多的语言可以在JVM上共存。

GraalVM是从2014年开始的一个研究项目。推特从2017年开始就在制作中使用它。但对于普通公众来说,它在2019年下半年就已经准备好了。

在本系列文章中,我将探讨GraalVM可以为JVM生态系统带来什么。这是本系列的第四篇文章,探讨如何将复杂对象从JavaScript传递到Scala。

返回复杂的值

上一篇文章中,我们看到了如何在Scala中使用JavaScript中的函数。在许多应用程序中,语言间共享数据对于可插入性非常重要。JavaScript将其数据编码为JavaScript对象。在Scala中,我们将数据编码为case类。在本例中,我们将看到如何将JavaScript对象转换为case类。

从代码中返回JavaScript对象

下面的代码在计算后返回一个JavaScript对象

val context = Context.create()
val result = context.eval("js","({ 'name':'John', 'age':20})")

在这段代码中,结果将具有JavaScript对象。

定义一个Case类

下面的代码将定义一个Scala Case类。

case class Person(name:String, age:Int)

将JavaScript对象转换为Case类

下面的代码将结果转换为case类对象。

val person = Person(result.getMember("name").asString(), result.getMember("age").asInt())

上面的代码使用Value对象上可用的getMember方法读取JavaScript返回的结果。它充当getter方法。使用它,我们可以读取结果并将其填入案例类。

您可以在github上访问完整的代码:https://github.com/phatak-dev/GraalVMExperiments/blob/master/src/main/scala/com/madhukaraphatak/graalvm/CaseClassFromJson.scala

小结

GraalVM的多语言特性使得在同一个VM上混合和匹配不同的语言非常有吸引力。在两种语言之间共享数据而不产生任何开销,使用户可以在本地使用这两种语言的功能。

 

除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2207.html

关于

发表评论

表情 格式

暂无评论

登录

忘记密码 ?

切换登录

注册