
-----------------------------------
wtd
Tue Oct 16, 2007 1:38 am

[Scala] Generics tip du jour
-----------------------------------
So you create a generic class Foo.

class Foo[T]

Now, you have classes A and B.

class A
class B extends A

Now, we can do something very simple.

val bar: Foo[A] = new Foo[A]
val baz: Foo[B] = new Foo[B]

It works fine.  Now, let's extend Foo.

class Foo[T]
class Bar[T] extends Foo[T]

And now the following works fine too.

val bar: Foo[A] = new Bar[A]
val baz: Foo[B] = new Bar[B]

But... what about...

val bar: Foo[A] = new Foo[B]

This fails!  

But, why should it?  B is a subtype of A, so Fooclass Foo[+T]
class Bar[+T] extends Foo[T]

Now we can even...

val baz: Foo[A] = Bar[B]
