我试图隐含地获取ClassTag。我有以下特点:
trait Tst{ self =>
type T
def getCls = getCls0[T] //no classtag
private def getCls0[T](implicit ev: ClassTag[T]) = ev.runtimeClass.asInstanceOf[Class[T]]
}
class Tsss extends Tst {
override type T = String
}
有没有办法通过类型变量声明隐式获取ClassTag
而不明确指定它?
事情是我试图使代码尽可能易于为客户使用。
答案 0 :(得分:2)
我建议你使用抽象类,隐式参数和泛型而不是参数类型:
abstract class Tst[T](implicit ev: ClassTag[T]) { self =>
def getCls = getCls0[T] //no classtag
private def getCls0[T](implicit ev: ClassTag[T]) =
ev.runtimeClass.asInstanceOf[Class[T]]
}
class Tsss extends Tst[String]
请注意,虽然Dotty支持带参数的特征,但它不会与泛型混合使用。