Source: https://www.cs.rpi.edu/academics/courses/spring21/csci2600/handout-files/files_12_04/Generics.pdf