Java Reference
In-Depth Information
meter angegeben wird. Sollte in der Methode push festgestellt werden, dass das Feld voll ist,
wird ein neues Feld der doppelten Größe angelegt und alle vorhandenen Elemente werden
in das neue Feld kopiert.
Listing 1.2 Keller (Stack) als Generics-Klasse (1. Variante)
package javacomp.basics;
public class GenericStack<T>
{
private int top;
private T[] stack;
public GenericStack(int initialLength)
{
top = 0;
stack = (T[])new Object[initialLength];//Warnung
}
public void push(T o)
{
if(top == stack.length)
{
//Keller auf das Doppelte vergrößern:
T[] newStack = (T[])new Object[2*stack.length];//Warnung
for(int i = 0; i < stack.length; i++)
{
newStack[i] = stack[i];
}
stack = newStack;
}
stack[top++] = o;
}
public T pop()
{
if(top > 0)
{
T result = stack[top-1];
stack[top-1] = null; //garbage collection
top--;
return result;
}
else
{
return null;
}
}
}
Die Implementierung funktioniert zwar, erzeugt aber beim Casten auf T[] im Konstruktor
und in der Methode push jeweils eine Warnung („Type safety: Unchecked cast from Object[]
to T[]“). Diese Problematik wird in Listing 1.2 durch einen entsprechenden Kommentar am
Zeilenende gekennzeichnet.
Um den Warnungen zu entgehen, kann man versuchen, den Typ des Attributs der Klasse
von T[] auf Object[] zu ändern (siehe Listing 1.3). Dadurch benötigt man im Konstruktor und
 
Search WWH ::




Custom Search