Я играю с Generic и массивами, кажется, что следующий код компилируется отлично,
ArrayList<Key> a = new ArrayList<Key>();
Но компилятор жалуется на это,
ArrayList<Key>[] a = new ArrayList<Key>[10];
Читая сообщение в stackoverflow, я понимаю, что это связано с типом Erasure, и я могу исправить его, используя
ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];
или список списка
ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();
Но я не могу понять причину этой сцены. Особенно, почему второй является незаконным, учитывая, что первый из них совершенно в порядке. И почему компилятор не жалуется на список списка.