You are correct that a non-generic List will take an Object or any of its subclasses (ie everything). But the idea of a List is that
you should know what you are putting in it, and know what you are getting back from it. So the compiler will give a warning unless you are really strict with your generics, so you don't need to use a class cast.