我需要使用一个返回类型为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?
答案 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())