如何在nashorn中创建Scala Seq [String]()?

时间:2015-09-11 15:24:48

标签: scala nashorn

我需要创建一个Seq()对象,以便将它从nashorn中的另一个Scala对象中提取出来。该课程通过

导入nashorn
var seqClass = Java.type("scala.collection.Seq");

,对象创建如下:

var seq = new seqClass();

但是当为它创建对象时,我得到一个TypeError:

TypeError: Can not create new object with constructor scala.collection.Seq with the passed arguments; they do not match any of its method signatures. in <eval> at line number 13

我怀疑缺少Seq()的泛型类,但我无法弄清楚如何将它添加到上面的代码中。

1 个答案:

答案 0 :(得分:0)

我没有使用Nashorn的经验,但Scala Seq和其他集合是通过调用伴随方法而不是构造函数创建的。鉴于我的理解,它应该像

val seqCompanion = Java.type("scala.collection.immutable.Seq$").MODULE$
seqCompanion.empty() 

编辑:我希望seqCompanion.apply(str1, str2, ...)适用于非空序列,但在检查之后,Seq$.apply的JVM签名为public scala.collection.GenTraversable scala.collection.generic.GenericCompanion.apply(scala.collection.Seq),因此它不会。您可以通过编写一个接受Array[A]并直接生成Seq[A]并按上述方式调用它的Scala方法来完成此操作:

// scala
object SeqToArray { def a2s[A](a: Array[A]) = a.toSeq }

// Nashorn
Java.type("SeqToArray$").MODULE$.a2s([str1, ...])