那些熟悉Scala的人是否知道如何使用Java中的scala.collection.immutable.Set?我可以模糊地阅读scaladoc,但我不确定如何从java调用scala方法如“ - ”(我假设我只需要在我的类路径中包含一些scala .jar文件......?)
答案 0 :(得分:8)
Scala将这些特殊符号写为$ plus,$ minus等。您可以通过对scala.collection.immutable.HashSet运行javap来自行查看。
这允许你做这样的代码:
Set s = new HashSet<String>();
s.$plus("one");
不漂亮,它在运行时实际上并不起作用!你得到一个NoSuchMethodError。我猜它与this discussion有关。使用他们讨论的变通方法,您可以使事情有效:
import scala.collection.generic.Addable;
import scala.collection.generic.Subtractable;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;
public class Test {
public static void main(String[] args) {
Set s = new HashSet<String>();
s = (Set<String>) ((Addable) s).$plus("GAH!");
s = (Set<String>) ((Addable) s).$plus("YIKES!");
s = (Set<String>) ((Subtractable) s).$minus("GAH!");
System.out.println(s); // prints Set(YIKES!)
}
}
这不是美女!?
我相信Java 7会允许转义时髦的方法名称,所以也许到那时你就可以做到
s = s.#"-"('GAH!')
要尝试此操作,您需要Scala发行版的lib /文件夹中的scala-library.jar。
更新:修复了Java 7语法,感谢Mirko。
答案 1 :(得分:3)
你可以使用它,如果它只用于初始化一套少于5件
import scala.collection.immutable.Set;
Set mySet = (Set<String>)new Set.Set1<String>("better")
Set mySet = (Set<String>)new Set.Set2<String>("better","andmore")
另一种方法如下:
import scala.collection.JavaConversions$;
import scala.collection.immutable.Set;
import scala.collection.immutable.Set$;
//code
java.util.HashSet hashsSet = new java.util.HashSet<String>();
hashsSet.add("item1");
hashsSet.add("item2");
hashsSet.add("item3");
hashsSet.add("item4");
hashsSet.add("item5");
// this is the mutable set of scala
scala.collection.mutable.Set scalaSet = JavaConversions$.MODULE$.asScalaSet(hashsSet);
//this is immutable set
Set immutable = scalaSet.toSet();
System.out.println(immutable);
答案 2 :(得分:0)
根据Adam的回答,以下在Eclipse下使用Scala 2.7.7可以正常工作:
package com.example.test.scala;
import scala.collection.immutable.HashSet;
import scala.collection.immutable.Set;
public class ImmutableSetTest1 {
public static void main(String[] args) {
Set s0 = new HashSet<String>();
Set[] s = new Set[3];
s[0] = s0.$plus("GAH!");
s[1] = s[0].$plus("YIKES!");
s[2] = s[1].$minus("GAH!");
for (int i = 0; i < 3; ++i)
System.out.println("s["+i+"]="+s[i]);
}
}
打印:
s[0]=Set(GAH!)
s[1]=Set(GAH!, YIKES!)
s[2]=Set(YIKES!)