繁体   English   中英

在scala中,如何使用其泛型成员的ClassTag创建专用类的ClassTag?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM