В качестве примера возьмем общий класс Array[T]
:
import scala.reflect.ClassTag
{
val t = implicitly[ClassTag[String]]
val ts = implicitly[ClassTag[Array[String]]]
Seq(t, ts).foreach(println)
}
это даст следующий результат:
java.lang.String
Array[java.lang.String]
Можно заметить, что тип String
не был стерт из-за того, что Array имеет член специализированного типа.
Моя проблема в том, что если тип String
не известен во время компиляции. И у вас есть только ClassTag неизвестного типа T
, можете ли вы получить специализированный ClassTag массива [T]?
e.g.
def arrayClassTagOf[T](implicit ev: ClassTag[T]): ClassTag[Array[T]] = ...
так что:
arrayClassTagOf[String] == implicitly[ClassTag[Array[String]]
arrayClassTagOf[Int] == implicitly[ClassTag[Array[Int]]
и т.п.
Большое спасибо за ваше мнение!