Home > Java > javaTutorial > body text

Why Can\'t Arrays Hold Generic Items in Java?

Mary-Kate Olsen
Release: 2024-11-03 20:28:02
Original
397 people have browsed it

Why Can't Arrays Hold Generic Items in Java?

Can Arrays Hold Generic Items?

Generic types and arrays can interact differently in Java. Consider the following code:

<code class="java">ArrayList<Key> a = new ArrayList<Key>();</code>
Copy after login

This code compiles successfully, creating a generic ArrayList named a. However, the following code fails to compile:

<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10];</code>
Copy after login

Why is this? It appears that arrays and generics are incompatible. To understand this, let's explore Type Erasure in Java.

Type Erasure: Behind the Scenes

When Java compiles, it performs Type Erasure, which replaces generic type information with raw types (Object). This prevents errors like placing a String into an ArrayList of Integers. However, arrays require a raw type, and generics cannot be represented as raw types.

Fixing the Array Issue

To create an array of generic items, you can explicitly cast the array to the desired type:

<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
Copy after login

This cast instructs the compiler that the array should be considered an array of ArrayLists with Key elements.

List of Lists: The Exception

In Java, a list of lists is not considered an array. Hence, the following code compiles without type casting:

<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();</code>
Copy after login

This distinction arises because ArrayList is a non-array type.

Conclusion

Arrays and generic types have limitations in Java due to Type Erasure. However, by explicitly casting arrays to the desired generic type or using lists of lists, one can navigate these limitations and effectively use generic types in both contexts.

The above is the detailed content of Why Can\'t Arrays Hold Generic Items in Java?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template