2017-03-24 2 views
0

Dire que j'ai cette fonction dans une classe:Scala: Deux manifiests implicites

def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O):F = { 
    grater[F].asObject(mongoObject) 
    } 

Je ne serai pas en mesure de compiler parce que je besoin d'un manifeste pour O et F. Mais je ne peux pas utiliser réellement appels manifestes implicites

def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O)(implicit mf:Manifest[O], implicit m:Manifest[F]):F = { 
    grater[F].asObject(mongoObject) 
    } 

est invalide, par exemple. Comment puis-je avoir deux génériques avec deux manifestes?

Répondre

1

Vous avez seulement besoin d'un mot-clé implicit, il applique à la liste complète des paramètres dans ce contexte:

def serializeObject[O<:MongoModel, F<:FunnelJob](mongoObject:O)(implicit mf:Manifest[O], m:Manifest[F]):F 

notes secondaires:

  1. vous n'avez pas besoin probablement Manifest[O];

  2. lorsque vous appelez, vous devrez fournir les paramètres de type explicitement ou avoir un type clairement prévu, sinon F sera inférée Nothing;

  3. Manifest s sont semi-dépréciée et doivent être remplacés par ClassTag ou TypeTag dans la plupart des cas. Voir .