Previously,
we implement an
IntegerStack class
with an array of
Integer:
public class IntegerStack implements Stack<Integer>
{
private Integer[] item;
private int stackTop;
public IntegerStack(int N)
{
item = new Integer[N]; // Create an array of Integer objects
stackTop = 0;
}
....
}
Implementing
a StringStack
If we
want to implement
a stack of String objects,
we
must
define
another class:
public class StringStack implements Stack<String>
{
private String[] item;
private int stackTop;
public StringStack(int N)
{
item = new String[N]; // Create an array of String objects
stackTop = 0;
}
....
}
Implementing a
generic stack
(i.e.: a
parameterized stack)
Can't we
implement
a generic stack with
a parameterizedarray type,
like this???:
public class ArrayStack<T>implements Stack<T>
{
private T[] item;
private int stackTop;
public ArrayStack(int N)
{
item = new T[N]; // Create an array of T objects
stackTop = 0;
}
....
}
Implementing a
generic stack
(i.e.: a
parameterized stack)
Unfortunately,
Java does
not allowed the
instantiation of
a generic array:
public class ArrayStack<T>implements Stack<T>
{
private T[] item;
private int stackTop;
public ArrayStack(int N)
{
item = new T[N]; // Create an array of T objects
stackTop = 0;
}
....
}
Error message:
ArrayStack.java:12: error:generic array creation
item = new T[N]; // Create an array of T objects
The reason why is
outside the
scope of
CS171 -
you can read more here:
Implementing a
generic stack
(i.e.: a
parameterized stack)
Fortunately,
there is a
simple hack
to work around
this Java restriction:
public class ArrayStack<T>implements Stack<T>
{
private T[] item;
private int stackTop;
public ArrayStack(int N)
{
item = (T[]) new Object[N]; // Create an array of Object objects
stackTop = 0;
}
....
}
Warning message:
ArrayStack.java:12: warning: [unchecked] unchecked cast
item = (T[]) new Object[N]; // Create an array of Object objects
^
required: T[]
found: Object[]
Warning messages are
not fatal errors and
our Java program will
run !