Tag: scala java interop

如何使用Java代码中的Scala varargs

有很多关于从Scala代码调用Java varargs的文章,但我唯一能找到相反的方法就是这个问题: 在java中使用scala vararg方法 ,它没有任何具体的例子。 我试图从一些Java代码中使用scala.Console ,因为java.io.Console在Eclipse中不起作用,而Scala则起作用。 但我无法得到这种方法 def readLine (text: String, args: Any*): String 工作,因为它似乎期待第二个参数的scala.collection.Seq[Any] ,我不知道如何在Java中创建Seq 。 我该如何解决这个问题? 我尝试过的事情: 1)使用null // Java String s = scala.Console.readLine(“Enter text: “, null); – 获得NullPointerException奖励。 2)用scala.collection.Seq.empty() )替换null ,但是javac会报告各种错误,例如Seq没有empty方法。 3)在scala.collection.immutable包对象中使用Nil对象,但这里建议的语法是scala.collection.immutable.package$Nil$.MODULE$ ,但是无法解析。 当然我可以使用不带varargs的readLine()方法,但这太容易了。

我可以直接在Java中使用scala List吗?

我可以在Java中使用scala List,例如: import scala.collection.immutable.List; class HelloScalaList { public static void main (String[] args) { List xs = List(1, 2, 3); System.out.println(xs); } } 它似乎没有编译。 找不到List $ .apply方法。 当我改变它 List xs = Dir.ls() 其中Dir是我的scala类,而ls()返回一个scala List,编译器抱怨 “内部编译器错误:java.lang.ClassCastException:org.eclipse.jdt.internal.compiler.lookup.BaseTypeBinding无法强制转换为org.eclipse.jupt.internal中的org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding。 compiler.lookup.BinaryTypeBinding.initializeTypeVariable(BinaryTypeBinding.java:927)” 我不知道这是什么意思。 我想在scala中编写一些库,但也希望它在Java中使用。 在我的scala类中有返回scala List的方法,对于java代码使用它们,我有两个选择: 直接在java中使用scala List 编写一个包装器类,为这些方法返回java.util.List。 我更喜欢选项1,因为否则我将不得不为几乎所有的scala类编写一个包装类。 但我只是无法在Java中运行scala List。

你如何从Java调用Scala单例方法?

我正在尝试将一些Scala代码注入到我现有的Java应用程序中。 (所以说,我想要更多的乐趣)。 我在Scala中创建了一个单例东西 ScalaPower.scala package org.fun class ScalaPower object ScalaPower{ def showMyPower(time:Int) = { (0 to time-1).mkString(“, “) } } 现在,在OldJava.java中 class OldJava { public void demo(){ System.out.println(?) } } 我应该填写? 那么Java会调用showMyPower方法吗? 我尝试了org.fun.ScalaPower.showMyPower(10)和org.fun.ScalaPower.getInstance().showMyPower(10)但都没有工作。 (使用Jad反编译类文件只显示无意义的代码。) 编辑我删除class ScalaPower声明和scala按预期生成静态方法。 (调用org.fun.ScalaPower.showMyPower(10) 。) 不知道它是否是scala编译器中的错误

从Java访问scala.None

你怎么能从Java访问scala.None ? 最后一行导致编译器死于“类型scala.None不接受参数”。 import scala.Option; import scala.Some; import scala.None; final Option object1 = new Some(“Hi there”); final Option object2 = new None(); 这失败了“无法找到符号构造函数None()”: final Option object2 = new None(); 这失败了“找不到符号变量无”: final Option object2 = None; 在2007年,这曾经工作,但随后Scala改变了。 Java编译器给出error: incompatible types : final Option object2 = scala.None$.MODULE$;