Search code examples
javaarraysgenericsunbounded-wildcard

Java - Is new Stack<?>[N] equivalent to new Stack[N] for generic data type Stack<Item>?


Is new Stack<?>[N] equivalent to new Stack[N] for a generic data type Stack<Item>?

EDIT: While I understand that mixing generic types and arrays should best be avoided and that more robust solutions exist, my query still stands: widely recognized textbooks such as Algorithms, 4th Edition by Kevin Wayne and Robert Sedgewick (pg. 158) suggest using constructs like the following:

Stack<String>[] a = (Stack<String>[]) new Stack[N];

Solution

  • Yes, they are equivalent, except for the return type (one is Stack[], the other is Stack<?>[]).

    Note that Stack[] can be assigned to Stack<String>[] without an explicit cast (you will just get an unchecked conversion warning), whereas it is an error to assign a Stack<?>[] to Stack<String>[] without a cast.

    new Stack[N] uses a raw type which is not recommended in new code.