2016-05-27 9 views
1

と製品のメンバーではありません:は、私は複数の将来の応答を待っているSerializableを

val futureResult = 
     for{ 
     futureEmployee <- this.getEmployeeById(effortConsulting.sObject.createdById) 
     futureForCompany <- this.getCompanyById(effortConsulting.sObject.forCompany) 
     futureFromCompany <- this.getCompanyById(effortConsulting.sObject.fromCompany) 
    } yield List(futureEmployee, futureForCompany, futureFromCompany) 

futureResult onComplete { 
     case Success(futureResponse) => { 
    println(futureResponse) 

     } [...] 

のprintlnは以下を出力します

List(Employee([...]), Company([...]), Company([...])) 

さて、これは大丈夫です。しかし、今私はこのようにこれらのオブジェクトで作業したい:

val employee  = futureResponse(0) 
    val fromCompany = futureResponse(2) 
    val forCompany = futureResponse(1) 

    println(forCompany.name) 

これは動作しません。私は、次のコンパイルエラーを得た:

値の名前はどのように私はこの問題を解決し、それが起こる理由をすることができますSerializableを

と製品のメンバーではないでしょうか?

答えて

4

List[A]のすべてのメンバーは、同じタイプのAである必要があります。したがって、異なるタイプのメンバーを含むListを作成しようとすると、実際には共通のスーパータイプのListが得られます。

すべてのケースクラスがProductとの特性を拡張しているため、無関係のケースクラスを含むリストを作成しようとすると、List[Product with Serializable]が得られます。もちろん、そのリストから要素を取得しようとすると、Product with Serializableが得られます。

1

さて、私はそれを持っています。私はリストではなくタプルを作成する必要があります。このように:

val futureResult = 
    for{ 
    futureEmployee <- this.getEmployeeById(effortConsulting.sObject.createdById) 
    futureForCompany <- this.getCompanyById(effortConsulting.sObject.forCompany) 
    futureFromCompany <- this.getCompanyById(effortConsulting.sObject.fromCompany) 
} yield (futureEmployee, futureForCompany, futureFromCompany) 

その後、私は._

val employee  = futureResponse._1 
    val fromCompany = futureResponse._2 
    val forCompany = futureResponse._3 

    println(employee) 

でタプルにアクセスすることができます誰かが私にその理由を教えてください。

関連する問題