Scala - 使用参数实例化泛型类型?

时间:2017-08-01 16:01:34

标签: scala generics

根据我的理解,如果A类和B类没有任何参数,那么utf-8-sig可以在这里使用,但因为它们确实有参数,不知道我怎么能避免在这里创建2个方法,一个用于SimpleA和另一个对于具有相同身体的SimpleB ..

ClassTag

尝试实例化T会产生错误trait Simple { val id: UUID val name: String } case class SimpleA(id: UUID, name: String) extends Simple case class SimpleB(id: UUID, name: String) extends Simple def fromTupleToSimple[T <: Simple](sf: (UUID, String)): T = new T(sf._1, sf._2) 。不确定这些类型的问题通常是如何解决的。

1 个答案:

答案 0 :(得分:2)

嗯,你仍然可以ClassTag,它变得有点棘手:

def fromTupleToSimple[T <: Simple : ClassTag](sf: (UUID, String)) = classTag
  .runtimeClass
  .getConstructors
  .head
  .newInstance(sf._1, sf._2)
  .asInstanceOf[T]