首页 > Java > java教程 > 为什么在 Java 中创建通用列表数组会导致编译器错误?

为什么在 Java 中创建通用列表数组会导致编译器错误?

Barbara Streisand
发布: 2024-11-03 23:16:31
原创
655 人浏览过

Why Does Creating an Array of Generic Lists in Java Cause a Compiler Error?

泛型列表数组

在 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,这是一个有效的原始类型。然而,在第二个示例中,编译器遇到原始类型 ArrayList[],这是不允许的。采用的强制转换可确保生成的数组的组件类型与定义的类型一致。

列表列表方法消除了这些问题,因为 ArrayList 不是数组,因此不会受到相同的限制。

以上是为什么在 Java 中创建通用列表数组会导致编译器错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板