在 Java 中,使用泛型和数组可能会带来挑战。虽然某些结构可能看起来有效,但编译器可能会提出反对意见。
请考虑以下示例:
<code class="java">ArrayList<Key> a = new ArrayList<Key>(); // Compiles without issue</code>
但是,当尝试创建通用列表数组时:
<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error</code>
此错误是由于类型擦除而产生的。要解决这个问题,可以按如下方式转换数组:
<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
或者使用列表列表:
<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>(); // No error</code>
要理解这些观察背后的基本原理,理解这些观察背后的基本原理至关重要Java 的类型擦除机制。在编译期间,泛型类型的类型信息将被删除,从而将它们视为原始类型。这是因为数组只能使用原始类型。
在第一个示例中,ArrayList
列表列表方法消除了这些问题,因为 ArrayList 不是数组,因此不会受到相同的限制。
以上是为什么在 Java 中创建通用列表数组会导致编译器错误?的详细内容。更多信息请关注PHP中文网其他相关文章!