2017-11-16 3 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

더 많은 코드와 더 복잡한 코드로 끝나게 될까요? classOf[Foo]fromProviders에 전달하면 실제로는 암시적인 createCodecProviderClass[Foo]이 들어가고 CodecProvider이 생성됩니다. 사용자가 생성하는 방법에 관계없이 모든 코덱 공급자를 fromProviders으로 "수동으로"전달해야합니다. 즉 다음과 같이 끝낼 수 있습니다.

val codecRegistry = fromRegistries(
    fromProviders(
    method[Foo], 
    method[Bar], 
    ... 
)