让我们以通用的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
。
我的问题是,如果在编译时不知道类型String
。而且您只有一个未知类型T
的ClassTag,您仍然可以获得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]]
等
非常感谢您的意见!
def arrayClassTagOf[T](implicit ev: ClassTag[T]): ClassTag[Array[T]] = ev.wrap
是,这项确切的工作已经有def wrap: ClassTag[Array[T]]
。