Scala,F-有界多态性未按预期工作

Scala,F-有界多态性未按预期工作,scala,generics,f-bounded-polymorphism,Scala,Generics,F Bounded Polymorphism,我有以下与iPAddress相关的课程。我这样定义IpAddress是因为我想强制执行IpAddress的每个子类型只能与其自身进行比较。也就是说,将Ipv4与Ipv6进行比较是毫无意义的 sealed trait IpAddress[T <: IpAddress[T]] extends Comparable[IpAddress[T]] { val address: Array[Byte] override def compareTo(that: IpAddress[T]): I

我有以下与iPAddress相关的课程。我这样定义IpAddress是因为我想强制执行IpAddress的每个子类型只能与其自身进行比较。也就是说,将Ipv4与Ipv6进行比较是毫无意义的

sealed trait IpAddress[T <: IpAddress[T]] extends Comparable[IpAddress[T]] {
  val address: Array[Byte]

  override def compareTo(that: IpAddress[T]): Int = ???
}

case class Ipv4Address(address: Array[Byte]) extends IpAddress[Ipv4Address]{
  assert(address.length == 4)
}

case class Ipv6Address(address: Array[Byte]) extends IpAddress[Ipv6Address]{
  assert(address.length == 16)
}
我得到这个错误:

Error: inferred type arguments [main.Main.Ipv4Address] do not conform to method doSomethingWithComparables's type parameter bounds [K <: Comparable[K]]

错误:推断的类型参数[main.main.Ipv4Address]不符合方法doSomethingWithCompariable的类型参数边界[K您的F绑定类需要扩展
Compariable[T]
而不是
Compariable[IpAddress[T]
,因此您正在比较绑定类而不是基类:

sealed trait IpAddress[T <: IpAddress[T]] extends Comparable[T] {
  val address: Array[Byte]

  override def compareTo(that: T): Int = ???
}
IpAddress[T
Error: inferred type arguments [main.Main.Ipv4Address] do not conform to method doSomethingWithComparables's type parameter bounds [K <: Comparable[K]]
sealed trait IpAddress[T <: IpAddress[T]] extends Comparable[T] {
  val address: Array[Byte]

  override def compareTo(that: T): Int = ???
}