为抽象类型隐式获取 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 支持带参数的特征,但它不能很好地与泛型混合。
我正在尝试隐式获取 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 支持带参数的特征,但它不能很好地与泛型混合。