Generizität in Java und C# 4.0 von Georg Brandstätter Generizität ist eine Unterart des universellen Polymorphismus, die Codewiederverwendung bei Typen ermöglicht, die nicht in einer Untertypbeziehung zu einander stehen. Vor allem Containerklassen wie Listen werden häufig als generische Klassen realisiert, da so einerseits Listen von beliebigen Typen erstellt werden können, andererseits aber statisch sichergestellt werden kann, dass sich in einer Liste nur jeweils Elemente eines definierten Typs befinden. Sowohl Java als auch C# bieten Sprachfeatures an, die das Schreiben von generischen Klassen und Methoden ermöglichen. Allerdings verwenden die beiden Sprachen unterschiedliche Methoden, um diesen generischen Code in Zwischencode zu übersetzen: Java verwendet aus Kompatibilitätsgründen die Methode der der Type Erasure, bei der generischer Code in nichtgenerischen Code übersetzt wird. Zur Laufzeit steht keine Information über die Typparameter des generischen Codes zur Verfügung, da diese Typparameter bei der Übersetzung entfernt werden. C# hingegen speichert im Zwischencode die jeweiligen Typparameter, sodass diese auch zur Laufzeit verfügbar sind. Im Rahmen dieses Projektpraktikums wurde nun untersucht, wie sich diese beiden unterschiedlichen Übersetzungsarten einerseits auf die Performance, andererseits auf die zur Verfügung stehenden Möglichkeiten beim Programmieren in der jeweiligen Sprache auswirken. Im ersten Teil des Praktikums wurden zwei Containerklassen geschrieben, anhand derer vor allem die Performance der beiden Sprachen im Bezug auf Generizität verglichen wurde. Allerdings wurden auch hier bereits erste Aspekte der Co- und Contravarianz, sowie andere Unterschiede zwischen den beiden Sprachen betrachtet. Im zweiten Teil wurde ein eigenes Programm geschrieben, um die Unterschiede hinsichtlich Co- und Contravarianz genauer zu untersuchen. Hierbei wurden sowohl Java als auch die beiden Arten, Cound Contravarianz in C# zu verwenden (use- und definitionsseitig) mit einander verglichen. Der Schwerpunkt lag hier auf dem Vergleich der Einfachheit der Verwendung dieser Konzepte. Im dritten Teil wurde insbesondere untersucht, welche zusätzlichen Möglichkeiten in der Programmierung C# (durch seine Übersetzungsmethode) gegenüber Java anbietet. Hierzu wurden wiederum eigene Programme geschrieben, die diese Möglichkeiten aufzeigen und zeigen, ob und wie sie sich auf die Einfachheit der Programmierung in C# auswirken bzw. welche zusätzlichen Schwierigkeiten dadurch auftreten können. Zuletzt soll noch ein Blick darauf geworfen werden, welche Möglichkeiten generischer Programmierung derzeit noch von keiner der beiden Sprachen angeboten werden bzw. wie es sich auf die Programmierung in diesen Sprachen auswirken würde, wenn es diese Möglichkeiten gäbe.