Try this:
public List CreateAnimals(int numAnimals) where T : Animal
{
Type type = typeof(T);
List returnList = new List();
//Use reflection to populate list and return
}
It should make sure that the allowed types for CreateAnimals inherit from Animal. Then hopefully, it won't have a problem with List animals = creator.CreateAnimals(5);