我有以下与 IpAddresses 相关的类。我以这种方式定义 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)
}
现在我正在尝试在不同的上下文中使用 IpAddress,如下所示:
def doSomethingWithComparables[K <: Comparable[K]](k: K): Int = k.compareTo(k)
但由于某种原因,我不能在这里使用 IpAddress。
doSomethingWithComparables(Ipv4Address(Array(0,0,0,0)))
我收到此错误:
Error: inferred type arguments [main.Main.Ipv4Address] do not conform to method doSomethingWithComparables's type parameter bounds [K <: Comparable[K]]
有人对此有任何想法吗?