java - 使用 Java 中的 Scala 集合出现问题

标签 java scala collections

关于这个主题实际上还有另一个问题:

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/

相关文章:

linq - 如何使用 LINQ 订购一个集合及其子集合?

java - 我想从 if else 语句中获得更多信息

java - 组织回调的首选方式是什么?

scala - 与 Scala 中生成的进程交互

Java - HashSet 实现不支持 remove() 的迭代器的最佳方式

java - 如何在 JPA 中拥有 2 个相同类型的集合?

java - 如何使用 HQL(Hibernate 查询语言)获取列的最后一个值

java 。 HtmlUnitDriver。下拉窗口问题

scala - 为什么编译器想不通 (_ > : T) => (_ <: V[_ <: U]) <: T => V[U] for V[+_]?

json - Scala play!2 为外部库中的类创建 Json 格式化程序