Scala-使用另一个泛型类型创建泛型类型

Scala-使用另一个泛型类型创建泛型类型,scala,generics,traits,Scala,Generics,Traits,我正在重构一个Java接口,该接口定义接口内的所有具体类型(方法接收和返回的类型)。我不想强制执行那些类型约束,并且希望保持接口的通用性,输入和输出值类型本身应该是通用的。接口中的一些方法是递归的,因为它们返回在定义特征本身的不同泛型类型中定义的泛型类型。我需要引用trait中的泛型类型 例如: trait Product[ID,GROUP] { def getProductId : ID // the product ID could be an Int,String, or some o

我正在重构一个Java接口,该接口定义接口内的所有具体类型(方法接收和返回的类型)。我不想强制执行那些类型约束,并且希望保持接口的通用性,输入和输出值类型本身应该是通用的。接口中的一些方法是递归的,因为它们返回在定义特征本身的不同泛型类型中定义的泛型类型。我需要引用trait中的泛型类型

例如:

trait Product[ID,GROUP] {
  def getProductId : ID // the product ID could be an Int,String, or some other type
  def getGroup : GROUP
}

// define a generic reader for the generic products
trait Reader[Key,Prod <: Product[What should I write here?] {
  def getProduct(key: Key) : Product
  def getProductsInGroup(group : Prod.getGroupType) : Seq[Prod] << How do I reference the Prod.GROUP type parameter?
}
trait产品[ID,GROUP]{
def getProductId:ID//产品ID可以是Int、String或其他类型
def getGroup:GROUP
}
//为通用产品定义通用读取器

trait Reader[Key,Prod您需要另一个类型参数:

 trait Reader[Key, Group, Prod <: Product[Key, Group]] {
     def getProduct(key: Key): Prod
     def getProductIdsInGroup(group: Group): Seq[Prod]
 }

trait Reader[Key,Group,Prod我的意思是我不希望trait具有类似“getProductsFromGroup(groupId:Int):Seq(Prod)”的内容,(不希望硬编码'Int'-我希望组的类型取自产品的groupd类型)traits中的所有类型都是用泛型术语定义的,并且是由具体实现定义的。我不熟悉泛型产品的“类型”语法,我该如何使用它?复制并粘贴我发布的代码片段如何?;)
 trait Product { 
   type Id
   type Group
 }

 trait Reader[Prod <: Product] {
    def getProduct(key: Prod#Id) 
    def getProductIdsInGroup(group: Prod#Group): Seq[Prod]
 }