我正在尝试使用泛型和数组,以下代码似乎可以正常编译:
ArrayList<Key> a = new ArrayList<Key>();
但编译器会对这个发出警告:
ArrayList<Key>[] a = new ArrayList<Key>[10];
通过阅读stackoverflow上的帖子,我有点理解这是由于类型擦除导致的,而我可以通过使用以下方式来修复它:
ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];
或者是列表的列表
ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();
但我无法理解其中的原因。特别是第二种情况为什么不合法,而第一种情况却完全没问题。以及为什么编译器不会抱怨列表的列表。