【发布时间】:2018-01-29 11:10:39
【问题描述】:
我想从我的 Java 代码中构造一个 scala.collection.immutable.List 类型的对象。当我尝试使用 new 创建它时,我收到一条错误消息,指出 scala.collection.immutable.List 是抽象的。我应该怎么做?
【问题讨论】:
-
你能贴出你试过的示例代码吗?
我想从我的 Java 代码中构造一个 scala.collection.immutable.List 类型的对象。当我尝试使用 new 创建它时,我收到一条错误消息,指出 scala.collection.immutable.List 是抽象的。我应该怎么做?
【问题讨论】:
scala.collection.immutable.List 类对于使用 Java 工作不是很友好。您仍然可以从 Java 中使用它。 Scala的等价物
val list = 3 :: 2 :: 1 :: Nil
应该是这样的
import scala.collection.immutable.List;
import scala.collection.immutable.Nil$;
import scala.collection.immutable.List$;
import scala.collection.immutable.$colon$colon;
scala.collection.immutable.List<Integer> list = new $colon$colon(3, new $colon$colon(2, new $colon$colon(1, Nil$.MODULE$)));
在许多情况下,另一种更简单的方法可能是先构造 Java 集合,然后才使用 scala.collection.JavaConverters 将其转换为 Scala。例如:
import scala.collection.JavaConverters;
java.util.List<Integer> javaList = new java.util.ArrayList<Integer>();
javaList.add(3);
javaList.add(2);
javaList.add(1);
scala.collection.immutable.List<Integer> scalaList = JavaConverters.collectionAsScalaIterable(javaList).toList();
【讨论】:
使用 List 伴随对象构造 List。
List(1, 2, 3)
使用:: 运算符构造列表。
val list = 1 :: 2 :: Nil
有关更多信息,请参阅 scala 文档
https://www.scala-lang.org/api/current/scala/collection/immutable/List.html
【讨论】: