2017-11-16 41 views
0

代わりにケースクラスのMongoDB:使用createCodecProviderを総称

val codecRegistry = fromRegistries(
    fromProviders(
     classOf[CaseClassNameGoesHere], 
     ... 
    ), 
    ... 
    ) 

ごとにハードコードされたラインを持っていることの私が代わりにそれらを作成することができますメソッドを作成したいと思います。

両方

def method[T] = { 
    Macros.createCodecProvider[T]() 
    } 

def method[T: ClassTag] = { 
    Macros.createCodecProvider[T]() 
    } 

...私にscala.ScalaReflectionExceptionを与える:タイプTは、私は、コンパイラがすべての呼び出しで見ることができることを望んでいるだろうクラス

ではありませんこの方法とその事を行うのです。

これを達成する方法はありますか?このアプローチの「遠く離れた」ソリューションは、classOfのリストを作成する必要がない限り、引き続き受け入れられます。

答えて

0

あなただけの無い、より多くのコード、およびより複雑なコードになってしまいますか?あなたはfromProvidersclassOf[Foo]を渡すと、実際にそこにちょうどClass[Foo]を取り、それのためにCodecProviderを作成する暗黙のcreateCodecProvider。どのように生成するかにかかわらず、すべてのコーデックプロバイダをfromProvidersに「手動で」渡す必要があります。

val codecRegistry = fromRegistries(
    fromProviders(
    method[Foo], 
    method[Bar], 
    ... 
) 
:つまりあなたはまだのようなもので終わるだろう
関連する問題