Akka演员返回类型Any而不是Vector [产品]

Bla*_*man 0 scala akka

我在akka中称呼这个:

for {
  products <- myActor ? MyActor.Search("...", 25)
} yield {
  val model = MyModel(products) 
}
Run Code Online (Sandbox Code Playgroud)

MyModel(products)行有一个错误说预期Vector[Product],实际Any.

签名是这样的:

def search(searchText: String, hitsPerPage: Int): Vector[Product]
Run Code Online (Sandbox Code Playgroud)

为什么它会以Any类型返回?

found   : Any
[error]  required: Vector[com.example.Product]
Run Code Online (Sandbox Code Playgroud)

我需要投射回复吗?

Jef*_*ung 5

从官方文档:

另请注意,Actor返回的Future是一个Future[Any]因为Actor是动态的....当使用非阻塞时,最好使用该mapTo方法安全地尝试将Future转换为期望的类型:

import scala.concurrent.Future
import akka.pattern.ask

val future: Future[String] = ask(actor, msg).mapTo[String]
Run Code Online (Sandbox Code Playgroud)

如果转换成功,该mapTo方法将返回Future包含结果的new ,否则返回ClassCastException.

所以你可以mapTo用来获得类型的结果Vector[Product]:

for {
  products <- (myActor ? MyActor.Search("...", 25)).mapTo[Vector[Product]]
} yield {
  ...
}
Run Code Online (Sandbox Code Playgroud)