Я играю с 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.