2017-03-24 153 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