2017-03-24 134 views
0

说我有一类这个功能:斯卡拉:两个隐manifiests

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

我将无法编译,因为我需要一个明显的O和F.不过,我不能实际使用隐式清单调用

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

例如无效。我怎样才能拥有两种舱单的两种仿制药?

回答

1

你只需要一个implicit关键字,它适用于整个参数列表在此背景下:

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

旁注:

  1. 你可能不需要Manifest[O];

  2. 调用时,您需要明确提供类型参数或者有明确的预期类型,否则F将被推断为Nothing;

  3. Manifest s已被半弃用,在大多数情况下应替换为ClassTagTypeTag。见http://docs.scala-lang.org/overviews/reflection/typetags-manifests.html