【问题标题】:How to initialize empty `util.Collection[String]` in scala?如何在scala中初始化空的`util.Collection [String]`?
【发布时间】:2022-01-12 14:53:05
【问题描述】:

不能很好地统一化它,因为

val topicAsCollection: util.Collection[String] = util.List[String]

未突出显示为错误,但编译失败

Error:(126, 59) class java.util.List is not a value
    val topicAsCollection: util.Collection[String] = util.List[String]

【问题讨论】:

  • 因为它是一个Java类型,它必须用常规的Java方法来实例化。没有同伴或apply 方法可以提供帮助。

标签: scala collections


【解决方案1】:

这里正确的做法是初始化空列表如下:

val topicAsCollection: util.Collection[String] = Collections.emptyList()

但是,它会导致另一个错误:

这个问题在这里已经有了答案:

我在 Scala 中有一个带有 Java 集合的代码

val topicAsCollection: util.List[String] = Collections.emptyList()
    topicAsCollection.add("recipes")

在运行时失败

java.lang.UnsupportedOperationException was thrown.
java.lang.UnsupportedOperationException
    at java.base/java.util.AbstractList.add(AbstractList.java:153)
    at java.base/java.util.AbstractList.add(AbstractList.java:111)

所以要在scala中直接初始化java ArrayList集合,正确的初始化需要显式类型和new:

val topicAsCollection: util.ArrayList[String] = new util.ArrayList[String]()

【讨论】:

  • 请注意,java.util.Collections.emptyList 返回一个不可变列表。如果这些东西对您在类型系统中捕获很重要,最好使用 Scala 集合库,而不是 Java 集合库。
  • @Thilo 不幸的是,他需要接受 Java 集合的 Java api
  • 你可以保留: util.Collection[String]作为最后一行的类型。
猜你喜欢
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多