如何从Java代码使用Scala变量
我正在尝试scala.Console
从Java代码中使用代码,原因是java.io.Console
它在Eclipse中不起作用,而Scala则可以。但我无法获得方法
def readLine (text: String, args: Any*): String
之所以能够正常工作,是因为它似乎期望scala.collection.Seq[Any]
第二个参数使用a,而且我看不到如何Seq
在Java中创建a
。我该如何解决?
我尝试过的事情:
1)使用null
// JavaString s = scala.Console.readLine("Enter text: ", null);
-获得奖励NullPointerException
。
2)替换为null
with
scala.collection.Seq.empty()
,但是javac报告各种错误,例如Seq
没有empty
方法。
3)Nil
在scala.collection.immutable
包对象中使用该对象,但此处建议的语法为scala.collection.immutable.package$Nil$.MODULE$
,但无法解析。
当然,我可以只使用readLine()
不包含varargs 的方法,但这太容易了。
回答:
您可以使用:
scala.collection.Seq$.MODULE$.empty();
从Java代码创建一个空序列。否则,您可以使用:
new scala.collection.mutable.ArrayBuffer();
创建一个空数组缓冲区,然后可以在其中添加元素并将其用作Scala vararg方法的参数。
否则,如果您要使用Java代码中要使用的vararg方法设计Scala库,请使用varargs
注释。它将生成方法的Java版本,该版本采用数组而不是Seq
。
scala> class A { | @annotation.varargs def foo(x: Int*) { println(x) }
| }
defined class A
scala> println(classOf[A].getMethods.toList)
List(public void $line1.$read$$iw$$iw$A.foo(scala.collection.Seq), public void $line1.$read$$iw$$iw$A.foo(int[]), ...)
上面的反射显示foo
生成了2个版本的方法-一个采用a Seq[Int]
,另一个采用a int[]
。
以上是 如何从Java代码使用Scala变量 的全部内容, 来源链接: utcz.com/qa/399820.html