That problem is really nothing to do with generics. It's the same as
String s = "hello";
Object o;
o = s; // this is OK
s = o; // this isn't, even if it would be ok with this particular data
s = (String) o; // is OK, unless there was something at runtime that put a non-String into o
Maybe you are having a problem with the way the generics don't treat subclasses like the rest of Java. A type <T> doesn't include T's subclasses, for that you need some variant of <? extends T>. Most people have a problem with that.
To quote the Oracle tutorials:
In general, if Foo is a subtype (subclass or subinterface) of Bar, and G is some generic type declaration, it is not the case that G<Foo> is a subtype of G<Bar>. This is probably the hardest thing you need to learn about generics, because it goes against our deeply held intuitions.