Easy Coding
  Forum Wiki Tagging Projekte Karte RSS
» Start
» All Recent Changes
» Wiki Suche
» Wiki Hilfe

Informationen

How To's Algorithmen

edit SideBar

Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.

Generics

Generics erlauben es, Datentypen zu erzeugen, die von den zu Grunde liegenden Typen abstrahieren. So würden eine Liste? von Zahlen, eine Liste von Zeichen und eine Liste von Datumsangaben im Grunde auf dieselbe Weise programmiert werden. Die Algorithmen zum Einfügen, Suchen und Löschen würden stets gleich ablaufen. Es ist daher wünschenswert, die Implementierung der Liste unabhängig von diesen Typen vorzunehmen.

Bei Programmiersprachen gibt es prinzipiell zwei Ansätze, generische Typen zu unterstützen. Der eine ist es, dass GenerischerTyp<T> für alle Ts den selben Code verwendet und über dynamische Bindung von Methoden spezifische Eigenschaften von T nutzt. Ein anderer Weg, den u.a. C++ geht, ist die Anwendung von Templates. Dabei wird der Typparameter zur Compilierzeit direkt mit dem konkreten Typ ersetzt.

Bei geht Microsoft einen Mittelweg, um die Vorteile beider Methoden zu kombinieren: Für alle Referenztypen? als Typparameter benutzt die generische Klasse den gleichen Native Code, da die interne Repräsentation (eine simple Referenz) von allen Referenztypen gleich ist. Bei der Benutzung von Werttypen als Typparameter wird für jeden Werttyp zur Laufzeit bei der erstmaligen Benutzung ein eigener Native Code Pfad erstellt.

Beispiel

generic-arraystack.java
  1. public class ArrayStack<T> implements Stack<T> {
  2.         private Object[] s;
  3.         private int si;
  4.         public ArrayStack() {
  5.                 s = new Object[100];
  6.                 si = -1;
  7.         }
  8.         public void push(T t) {
  9.                 s[++si] = t;
  10.         }
  11.         public void pop() {
  12.                 si -= 1;
  13.         }
  14.         public T top() {
  15.                 return (T) s[si];
  16.         }
  17.         public boolean isEmpty() {
  18.                 return si == 0;
  19.         }
  20. }
Zuletzt geändert am 30.01.2007 20:22 Uhr
  Impressum