Scala类型标记-完全限定与非完全限定

Scala类型标记-完全限定与非完全限定,scala,Scala,我有一些代码(很难共享,而且我还不能简单地复制),导致以下错误: found: reflect.runtime.universe.TypeTag[com.company.some.package.Individ] required: reflect.runtime.universe.TypeTag[Individ] 我的代码找不到TypeTag,所以我尝试显式地传递它。即代替 abstract class Validator[T<: Product: TypeTag] {...} cla

我有一些代码(很难共享,而且我还不能简单地复制),导致以下错误:

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

抽象类验证器[T您可能想要的是

class IndividValidator extends Validator[Individ] {...} 
当你写作时

class IndividValidator[Individ] extends Validator[Individ]()(tt)
您使用名为
individId
的泛型类型参数创建了一个新的泛型类
IndividValidator
,它会隐藏导入的类。因此
中的术语
individId
扩展了验证器[individId]
匹配到此类型参数,而不是您的
com.company.some.package.individid

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

这显然不是你想要的。

你可能想要的是

class IndividValidator extends Validator[Individ] {...} 
当你写作时

class IndividValidator[Individ] extends Validator[Individ]()(tt)
您使用名为
individId
的泛型类型参数创建了一个新的泛型类
IndividValidator
,它会隐藏导入的类。因此
中的术语
individId
扩展了验证器[individId]
匹配到此类型参数,而不是您的
com.company.some.package.individid

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

这显然不是您想要的。

啊,是的-谢谢!什么时候可以在类上使用type参数?@user2682459,我不确定我是否理解您的问题。在许多情况下,泛型类型是减少代码重复的一个好选择。典型的例子是容器/集合库。您的基本
验证器
类可能很容易也可以非常有效地使用。对不起,我不是很清楚。我知道
验证程序[t]
非常有用,但是我什么时候才可以合法地使用
类IndividValidator[individId]扩展验证程序[individId]
(例如).正如您正确指出的,我不想在这里参数化
IndividValidator
,但我什么时候可以这样做?@user2682459,我想说我无法想象调用泛型参数
IndividValidator
是一个好的选择。我可以想象类似
类IndividValidator的情况[I Ahhh是的-谢谢!什么时候可以在类上使用type参数?@user2682459,我不确定我是否明白你的问题。在很多情况下,泛型类型是减少代码重复的好选择。典型的例子是容器/集合库。你的基本
验证程序
类可能也很容易使用。对不起,我想不太清楚。我知道
Validator[t]
非常有用,但我什么时候才能合法地使用
类IndividValidator[individId]扩展Validator[individId]
(例如).正如您正确指出的,我不想在这里参数化
IndividValidator
,但我什么时候可以这样做?@user2682459,我想说我无法想象调用泛型参数
IndividValidator
是一个好的选择。我可以想象类似
类IndividValidator[I]的情况