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
暂无评论