Skip to content

Commit 516ea32

Browse files
NthPortallrytz
authored andcommitted
[backport] Tweak variance of Ordering.min and .max
backport of 26ccfa8
1 parent 42b335a commit 516ea32

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

src/library/scala/math/Ordering.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl
103103
override def equiv(x: T, y: T): Boolean = compare(x, y) == 0
104104

105105
/** Return `x` if `x` >= `y`, otherwise `y`. */
106-
def max(x: T, y: T): T = if (gteq(x, y)) x else y
106+
def max[U <: T](x: U, y: U): U = if (gteq(x, y)) x else y
107107

108108
/** Return `x` if `x` <= `y`, otherwise `y`. */
109-
def min(x: T, y: T): T = if (lteq(x, y)) x else y
109+
def min[U <: T](x: U, y: U): U = if (lteq(x, y)) x else y
110110

111111
/** Return the opposite ordering of this one. */
112112
override def reverse: Ordering[T] = new Ordering.Reverse[T](this)
@@ -175,8 +175,8 @@ object Ordering extends LowPriorityOrderingImplicits {
175175
override def lt(x: T, y: T): Boolean = outer.lt(y, x)
176176
override def gt(x: T, y: T): Boolean = outer.gt(y, x)
177177
override def equiv(x: T, y: T): Boolean = outer.equiv(y, x)
178-
override def max(x: T, y: T): T = outer.min(x, y)
179-
override def min(x: T, y: T): T = outer.max(x, y)
178+
override def max[U <: T](x: U, y: U): U = outer.min(x, y)
179+
override def min[U <: T](x: U, y: U): U = outer.max(x, y)
180180

181181
override def equals(obj: scala.Any): Boolean = obj match {
182182
case that: AnyRef if this eq that => true
@@ -301,8 +301,8 @@ object Ordering extends LowPriorityOrderingImplicits {
301301
override def lt(x: Float, y: Float): Boolean = x < y
302302
override def gt(x: Float, y: Float): Boolean = x > y
303303
override def equiv(x: Float, y: Float): Boolean = x == y
304-
override def max(x: Float, y: Float): Float = math.max(x, y)
305-
override def min(x: Float, y: Float): Float = math.min(x, y)
304+
override def max[U <: Float](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
305+
override def min[U <: Float](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
306306
}
307307
implicit object Float extends FloatOrdering
308308

@@ -314,8 +314,8 @@ object Ordering extends LowPriorityOrderingImplicits {
314314
override def lt(x: Double, y: Double): Boolean = x < y
315315
override def gt(x: Double, y: Double): Boolean = x > y
316316
override def equiv(x: Double, y: Double): Boolean = x == y
317-
override def max(x: Double, y: Double): Double = math.max(x, y)
318-
override def min(x: Double, y: Double): Double = math.min(x, y)
317+
override def max[U <: Double](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
318+
override def min[U <: Double](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
319319
}
320320
implicit object Double extends DoubleOrdering
321321

0 commit comments

Comments
 (0)