Массив универсального списка

Я играю с Generic и массивами, похоже, следующий код компилируется нормально,

ArrayList<Key> a = new ArrayList<Key>();

Но компилятор жалуется на этот,

ArrayList<Key>[] a = new ArrayList<Key>[10];

By читая сообщение в stackoverflow, я как бы понимаю, что это происходит из-за стирания типа, и я могу исправить это, используя,

ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];

или список списка

ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();

. Но я не могу понять причину, скрытую за сценой. В частности, почему второй является незаконным, если первый совершенно нормален. И почему компилятор не жалуется на список list.

31
задан Hong 18 October 2011 в 15:53
поделиться