Scala,F-有界多态性未按预期工作
我有以下与iPAddress相关的课程。我这样定义IpAddress是因为我想强制执行IpAddress的每个子类型只能与其自身进行比较。也就是说,将Ipv4与Ipv6进行比较是毫无意义的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
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 = ???
}