Scala:函数有返回类型的接口,我需要实现类

时间:2016-07-28 15:09:43

标签: java scala collections

我需要使用一个返回类型为java.util.Collection的函数。我知道,对于我的用例,此函数将始终返回一个ArrayList(实现Collection)。 我想写一个如下声明:

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

但是我收到了错误:

Error:(88, 87) type mismatch; found : java.util.Collection[org.codehaus.jackson.JsonNode] required: java.util.ArrayList[org.codehaus.jackson.JsonNode]

在Java中,我可能会直接投射它。我试图避免使用asInstanceOf,因为我被告知这很慢。有没有其他方法来获得ArrayList?

2 个答案:

答案 0 :(得分:3)

如果你有一个函数返回一个X类型,但想要一个Y类型,其中Y有一个"是"关系,然后你可以做到以下几点:

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

通过这种方式,您可以同时支持基础类型和任何需要转换的实现,而无需使用不安全的转换。

答案 1 :(得分:0)

一般情况下,将Collection投射到ArrayList是错误的,因为Collection可以有任何实现。

我建议2个选项

  • 更改functionThatReturnsCollection的签名,以便返回ArrayList
  • 或从ArrayList

    创建新的Collection

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