현재 프로젝트의 일부에는 데이터베이스에 연결된 형식의 변환과 Json을 통해 결과를 클라이언트에 직렬화 할 때 사용되는 제네릭 형식이 포함됩니다. 현재 스칼라에서 구현 된 형식은 형식 유추를 사용하여 스칼라 TypeTag 이용한 변환, 모든 경우의 클래스는 응용 프로그램 내에서 내부적으로 정의 입력으로개체 변환에 대한 형식 유추에 대한 설명
def Transform[A: TypeTag](objects:Seq[A]):Seq[Children] = typeOf[A] match {
case pc if pc =:= typeOf[ProductCategory] =>
TransformProductCategory(objects.asInstanceOf[Seq[ProductCategory]])
case pa if pa =:= typeOf[ProductArea] =>
TransformProductArea(objects.asInstanceOf[Seq[ProductArea]])
case pg if pg =:= typeOf[ProductGroup] =>
TransformProductGroup(objects.asInstanceOf[Seq[ProductGroup]])
case psg if psg =:= typeOf[ProductSubGroup] =>
TransformProductSubGroup(objects.asInstanceOf[Seq[ProductSubGroup]])
case _ =>
throw new IllegalArgumentException("Invalid transformation")
}
유형은 예를 들어, 사용했을
case class ProductCategory(id: Long, name: String,
thumbnail: Option[String],
image:Option[String],
sequence:Int)
이 방식은 순간에 적합하지만, 케이 't f 잠재적으로 더 많은 DB 유형이 추가 될 때 기능적이거나 확장 가능합니다. 나는 또한 유형이 이미 주장 된대로 asInstanceOf
을 중복 사용해야한다고 생각합니다. 나의 제한된 내포 된 지식은 변형을 수행하기 위해 대신 사용될 수 있으며 위의 Transform[A: TypeTag](objects:Seq[A]):Seq[Children]
메소드의 필요성을 완전히 제거 할 수 있음을 암시합니다. 아니면 내가 대신 사용해야했던 다른 접근 방식이 있을까요?
사람들이 왜 def transform [A : Transformer] (objects : Seq [A])를 선호하는지 이해하지 못합니다. Seq [Children] = 암시 적으로 [Transformer [A]]. 이상 def transform [a] (객체 : Seq [A]) (암시 적 t : Transformer [A]) = t.transformImpl (객체)'... 강제적으로 '암시 적으로 장기적으로 끊임없이 아주 오래되어야합니다. 그렇다면 스칼라가 자동으로 그렇게하지 않는 이유는 무엇입니까? –