Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何处理方法的返回类型,该方法有时返回case类对象,有时返回该case类的未来_Scala_Playframework_Playframework 2.0_Future - Fatal编程技术网

Scala 如何处理方法的返回类型,该方法有时返回case类对象,有时返回该case类的未来

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

假设我有4个对象共享名为
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]]
,看起来同样难看。@Joe
Future.successful
Future.application
在这里(通常如果你已经有了值或者计算很简单,不能失败):
如果(name==“Johan”)Future.successful(Info(“Johan Dad”,“Johan Mom”))其他