'
Genericity is one of the most powerful means for obtaining flexibility in programming with statically typed programming languages. Genericity constructs take on very different forms, the choice of which has a considerable impact on expressiveness, modularity, static checkability and efficiency properties of programs. This tutorial presents an in-depth discussion of the history, origins, and structure of a wide range of genericity mechanisms, enabling the participant to better understand the rational behind various programming language designs and to utilize available mechanisms more efficiently. The tutorial is organized as follows:
Special attention will be given to the last 5 years\' research in adding genericity to the Java Programming Language. We will use a small number of continuing examples to illustrate the strengths and weaknesses of the different approaches, and towards the end we present a large complex example of programming using genericity mechanisms. '