首页 > 解决方案 > Scala 类型标签 - 完全限定与非完全限定

问题描述

我有一些代码(难以共享,我无法轻松复制),它引发了以下错误:

found: reflect.runtime.universe.TypeTag[com.company.some.package.Individ]
required: reflect.runtime.universe.TypeTag[Individ]

我的代码找不到 TypeTag,所以我试图明确地传递它。即代替

abstract class Validator[T<: Product: TypeTag] {...}
class Validator[Individ] extends Validator[Individ] {...} // Implicits not found

我试过了..

abstract class Validator[T<: Product](implicit tt: TypeTag[T]) {...}

implicit val tt = typeTag[Individ]
class Validator[Individ] extends Validator[Individ]()(tt) {...} // Wrong type, as above

Individ只是一个案例类

有任何想法吗?

标签: scala

解决方案


你可能想要的是

class IndividValidator extends Validator[Individ] {...} 

当你写

class IndividValidator[Individ] extends Validator[Individ]()(tt)

您创建一个新的泛型类IndividValidator,其泛型类型参数称为Individ,它会影响您导入的类。因此 中的术语Individextends Validator[Individ]此类型参数匹配,而不是与您的com.company.some.package.Individ. 换句话说,这是相同的代码

class IndividValidator[A] extends Validator[A]()(tt)

这显然不是你想要的。


推荐阅读