java - Scala:函数有接口(interface)的返回类型,我需要实现类

标签 java scala collections

我需要使用返回类型为 java.util.Collection 的函数。我知道对于我的用例,这个函数将始终返回一个 ArrayList (它实现 Collection)。 我正在尝试写这样的声明:

val secMasterPrimaryRic: util.ArrayList[JsonNode] = functionThatReturnsCollection()

但我收到错误:

错误:(88, 87) 类型不匹配; 发现:java.util.Collection[org.codehaus.jackson.JsonNode] 必需:java.util.ArrayList[org.codehaus.jackson.JsonNode]

在 Java 中我可能可以直接转换它。我试图避免使用 asInstanceOf 因为我被告知这非常慢。还有其他方法获取ArrayList吗?

最佳答案

如果您有一个返回类型 X 的函数,但想要类型 Y,其中 Y 具有“is a”关系,则您可以执行以下操作:

val myValue: TypeIWant = myFunction() match{
  case x: TypeIWant => x
  case y => convertToTypeIWant(y)
}

这样,您就可以尊重底层类型和任何需要转换的实现,而不必诉诸使用不安全的强制转换。

关于java - Scala:函数有接口(interface)的返回类型,我需要实现类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640278/

相关文章:

java - 如何在arraylist中添加数据并更新

斯卡拉克 : Assertion failed while run Scalatest in IDEA

scala - 用于 HTTP 网关的 Play2-mini 和 Akka2

java - 获取 LinkedList 中 map 对象的索引

c# - 我可以使用大括号初始化 BCL 不可变集合吗?

c# - 独特的对集合

java - org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 表权限不存在

java - 这个 Stream 对象是创建无限的黑猩猩对象列表还是只创建一个黑猩猩对象?

java - 多个登录页面 Spring

scala - 将案例类与 List 一起使用时,Dataframe.rdd.count 抛出找不到实际参数适用的构造函数/方法