为抽象类型隐式获取 ClassTag

Get ClassTag implicitly for abstract type

我正在尝试隐式获取 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

我正在努力使代码尽可能易于客户使用。

我建议您使用抽象 类、隐式参数和泛型,而不是参数类型:

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 支持带参数的特征,但它不能很好地与泛型混合。