scala – Trait不符合类型参数边界
发布时间:2020-12-16 18:14:21 所属栏目:安全 来源:网络整理
导读:我有类型的问题. 在这种情况下,我有两个基本方法的特征,其中一个取决于另一个. 之后,我有两个实现. 你知道这里有什么问题吗? 编译器说: type arguments [ImplDefinition,ImplDto,ImplDtoIdentifier] do not conform to trait ChildOperations's type param
我有类型的问题.
在这种情况下,我有两个基本方法的特征,其中一个取决于另一个. 之后,我有两个实现. 你知道这里有什么问题吗? 编译器说: type arguments [ImplDefinition,ImplDto,ImplDtoIdentifier] do not conform to trait ChildOperations's type parameter bounds [C <: Types.BaseT[A,I],A <: Types.IDObj[I],I <: IIdentifier] [error] class ImplOperations extends Parent2(new ImplDefinition) with ChildOperations[ImplDefinition,ImplDtoIdentifier] { 代码: /* * Generic Implementation */ object Types { type IDObj[I <: IIdentifier] = AnyRef {def id: I} type BaseT[A,I <: IIdentifier] = Parent1[A] { def id: Foo[I] } } trait IIdentifier extends Any { def id: Long override def toString = id.toString } class Parent1[A](a: String) class Foo[A](a: String) trait ChildDefinition[A <: Types.IDObj[I],I <: IIdentifier] { self: Parent1[A] => def id(a: A): Foo[I] } class Parent2[A](a: A) trait ChildOperations[C <: Types.BaseT[A,I <: IIdentifier] { self: Parent2[C] => def get(identifier: I): Option[A] } /* * Concrete Implementation */ case class ImplDtoIdentifier(id: Long) extends IIdentifier case class ImplDto(id: ImplDtoIdentifier,name: String) class ImplDefinition extends Parent1[ImplDto]("Value") with ChildDefinition[ImplDto,ImplDtoIdentifier] { override def id(a: ImplDto): Foo[ImplDtoIdentifier] = ??? } class ImplOperations extends Parent2(new ImplDefinition) with ChildOperations[ImplDefinition,ImplDtoIdentifier] { self => override def get(identifier: ImplDtoIdentifier): Option[ImplDto] = ??? // here I will use the id method from ImplDefinition } 解决方法
问题似乎是ImplDefinition中id def的签名.
Types.BaseT要求一个def id:Foo [I]但是ImplDefinition只提供一个def id(a:ImplDto):Foo [ImplDtoIdentifier] 如果你添加一个def id:Foo [ImplDtoIdentifier] = ???到ImplDefinition类的东西会编译: class ImplDefinition extends Parent1[ImplDto]("Value") with ChildDefinition[ImplDto,ImplDtoIdentifier] { def id:Foo[ImplDtoIdentifier] = ??? override def id(a: ImplDto): Foo[ImplDtoIdentifier] = ??? } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |