Scala 如何处理方法的返回类型,该方法有时返回case类对象,有时返回该case类的未来
假设我有4个对象共享名为Scala 如何处理方法的返回类型,该方法有时返回case类对象,有时返回该case类的未来,scala,playframework,playframework-2.0,future,Scala,Playframework,Playframework 2.0,Future,假设我有4个对象共享名为getParentName()的相同方法 两个对象getParentName()返回Info,这只是一个case类 object Jack extends Person { override def getParentName(): Info = {...} } object Mila extends Person { override def getParentName(): Info = {...} } 另外两个返回一个未来[信息]: object M
getParentName()
的相同方法
两个对象getParentName()
返回Info
,这只是一个case类
object Jack extends Person {
override def getParentName(): Info = {...}
}
object Mila extends Person {
override def getParentName(): Info = {...}
}
另外两个返回一个未来[信息]:
object Mike @Inject() (wsclient: WSClient) extends Person {
override def getParentName(): Future[Info] = {...}
}
object Amy @Inject() (wsclient: WSClient) extends Person {
override def getParentName(): Future[Info] = {...}
}
现在我想让PeopleManager
类在这些对象列表上迭代并获得getParentName()
结果:
class PeopleManager {
def getParentsNames ():??? = {
listOfPeople.map(person => person.getParentName)
}
}
但是我不确定处理getParentsNames()
返回类型的正确方法是什么
控制器将在操作中使用PeopleManager
,以释放获取家长姓名的GET
方法。处理这种情况的好方法是什么
谢谢 你能让一切回归未来吗,其中一些只是立即完成的包装?那么类或trait
Person
中的getParentName
的返回类型是什么?@JoeK其他一些方法只是基本计算,有些方法我需要在内部执行api调用来计算返回类型,这样我就可以得到一个未来。我可能会包装那些在未来没有未来的,但这似乎很奇怪…像一个糟糕的做法,我认为Person
中的getParentName
应该有最通用的返回类型。通常这意味着一个共同的超类或特征,但在这种情况下,我认为它在时间上是普遍的Future[Info]
表示现在可用或将来可用的Info
Info
表示现在可用的Info
,因此它“更具体”。另一个选项是或者[Info,Future[Info]]
,看起来同样难看。@JoeFuture.successful
比Future.application
在这里(通常如果你已经有了值或者计算很简单,不能失败):如果(name==“Johan”)Future.successful(Info(“Johan Dad”,“Johan Mom”))其他