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];
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.