【发布时间】:2019-12-21 22:37:10
【问题描述】:
我们以常见的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 在编译时不知道。而你只有一个未知类型的ClassTagT,还能得到Array[T]的特化ClassTag吗?
例如
def arrayClassTagOf[T](implicit ev: ClassTag[T]): ClassTag[Array[T]] = ...
这样:
arrayClassTagOf[String] == implicitly[ClassTag[Array[String]]
arrayClassTagOf[Int] == implicitly[ClassTag[Array[Int]]
等等
非常感谢您的意见!
【问题讨论】:
标签: scala template-specialization scala-reflect