It requires a casting because the compiler doesn't know the type of the collection that any given key has. Your map says that it maps a Class
of an unkwnown type to a Collection
of an unknown type, but you have no way of telling the map that they have to be the same type.
When working with generics, most of the time you can't get rid of the casts. Most of those casts are, however, unchecked conversions that are removed at runtime because of type erasure. The point is that, when you can guarantee type safety, the compiler leaves you alone and clients of your class get a type-safe, casting-free interface.
Of course, if you screw up, the runtime has no way of alerting you.