The following code does compile, even though B()
and C()
are of different types. I believe this is because both are of type A
, so that X
gets set to A
by the compiler when type checking foo(B(), C())
.
class A
class B extends A
class C extends B
def foo[X <: A](x: X, y: X): X = x
def bar(): Unit = {
foo(B(), C())
}
Could I somehow change the definition of foo
in such a way that it would force x
and y
to have exactly the same static type (their most specific static type), while still being generic? In such a way that foo(B(), C())
would result in a type error?