Java Generic Invariance: Why List<Dog> Is Not List<Animal> | CodeTrail