关于这个问题实际上还有另一个问题:
example of using scala.collection.immutable.Set from java
但信息似乎不再正确。
我尝试使用不可变的Scala集:
class Foo {
public static void main(String[] args) {
scala.collection.Set<Integer> mySet =
new scala.collection.immutable.Set.Set1<Integer>(1);
mySet = mySet.$plus(3);
}
}
但是,在运行时,这会失败:
Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.Set.$plus(Ljava/lang/Object;)Lscala/collection/SetLike;
at Foo.main(Foo.java:4)
之前关于StackOverflow的讨论意味着此问题的解决方案是使用Addable trait。但是,它被删除了几个版本。实际上还有StackOverlow对此的讨论
Why is Scala's Addable deprecated?
然而,那里使用+:或:+的建议对我没有帮助,因为无序的集合没有这些方法。
可以使用SetLike特征,但它只会更改错误消息
Exception in thread "main" java.lang.NoSuchMethodError: scala.collection.SetLike.$plus(Ljava/lang/Object;)Lscala/collection/SetLike;
at Foo.main(Foo.java:4)
以防万一:
% scala -version
Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL
% java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
答案 0 :(得分:2)
GenSet似乎是你正在寻找的特质:
class Foo {
public static void main(String[] args) {
scala.collection.GenSet<Integer> mySet =
scala.collection.Set$.MODULE$.<Integer>empty();
mySet = mySet.$plus(3);
}
}
或
class Foo {
public static void main(String[] args) {
scala.collection.GenSet<Integer> mySet =
new scala.collection.immutable.Set.Set1<Integer>(1);
mySet = mySet.$plus(3);
}
}