복붙노트

[SCALA] 어떻게 ClassTag 폼 TypeTag를 얻을, 또는 두 가지 모두 같은 시간에하는?

SCALA

어떻게 ClassTag 폼 TypeTag를 얻을, 또는 두 가지 모두 같은 시간에하는?

나는이 같은 일부 코드가 있습니다 :

class ReflectiveJsonFormat[T:TypeTag] extends JsonFormat[T] {
  def write(x: T) : JsValue = {
   val t = typeOf[T]
   val getters = t.declarations.filter { s => s.isMethod && s.asMethod.isGetter }
   val mirror = runtimeMirror(this.getClass.getClassLoader)
   val instanceMiror = mirror.reflect(x)
  }
}

그 마지막 줄은 실패 :

나는 TypeTag가 ClassTag보다 더 많은 정보를 원하시면 알았는데? 나는 TypeTag에서 ClassTag를받을 수 있습니까? TypeTag 및 ClassTag 모두 -하지 않으면, T는 두 개의 컨텍스트 경계가 말하는 몇 가지 문법이있다? 또는, 당신은 어떻게 그렇지 않으면이 코드를 해결하는 것입니다?

해결법

  1. ==============================

    1.그게 당신이 후에 어떤 경우 음 스칼라 지원 여러 컨텍스트 경계를 수행합니다

    그게 당신이 후에 어떤 경우 음 스칼라 지원 여러 컨텍스트 경계를 수행합니다

    class ReflectiveJsonFormat[T:TypeTag:ClassTag] 
    
  2. ==============================

    2.라이브러리는 제공하지 않습니다 내장 방법 직접이 ClassTag에 TypeTag 변환,하지만 당신은 하나를 쓸 수 :

    라이브러리는 제공하지 않습니다 내장 방법 직접이 ClassTag에 TypeTag 변환,하지만 당신은 하나를 쓸 수 :

    import reflect.runtime.universe._
    import reflect.ClassTag
    
    def typeToClassTag[T: TypeTag]: ClassTag[T] = {
      ClassTag[T]( typeTag[T].mirror.runtimeClass( typeTag[T].tpe ) )
    }
    

    암시 적 ClassTag이 필요하기 전에 그런 다음 방법에 단지 추가 :

    implicit val c = typeToClassTag[T]
    
  3. from https://stackoverflow.com/questions/18729321/how-to-get-classtag-form-typetag-or-both-at-same-time by cc-by-sa and MIT license