Robert Segewick and Kevin Wayne著『Algorithms 4th Edition』では、ジェネリクスを使って、スタックを実装しています。

文字列のスタックの配列を作る時には、以下のように書かなければならないと書いてあります。

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

一方、Itemが型パラメータであるとき、Item型の配列を作るには、以下のように書かなければならないと書いてあります。

a = (Item[]) new Object[cap];

自然に、なぜ以下のように書かないのかという疑問が思い浮かびます。

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

こう書かない理由が以下のように書かれていますが、これが何を言っているのか分かりません。

You might have expected to use Object instead of Stack. When using generics, Java checks for type safety at compile time,
but throws away that information at run time, so it is left with Stack<Object>[] or just Stack[], for short, which we must cast
to Stack<String>[].

何を言っているのでしょうか?