[英]In scala, how to create a ClassTag of a specialised class using ClassTag of its generic member?
我们以常见的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]
可以观察到,由于 Array 具有专门的类型成员,因此类型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]]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.