关于这个主题实际上还有另一个问题:
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 特征。然而,它在几个版本之前就被删除了。实际上 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)
最佳答案
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);
}
}
关于java - 使用 Java 中的 Scala 集合出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34518402/