English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Spiegazione dettagliata della costruzione di array con parametri generici in Java e esempi
Prefazione:
Di recente, mentre scrivevo codice, mi è venuta in mente una domanda. Di solito i nostri array vengono passati come parametri a un metodo. Come possiamo creare un array all'interno di un metodo? Quando il tipo è chiaro, non c'è difficoltà. E se il parametro è un tipo generico?
public static <T> T[] creArray (T obj){ T[] arr = new T[10]; }
Il metodo di creare un array utilizzando direttamente T è errato, verrà generato un errore di compilazione: Cannot create a generic array of T. Java non supporta la creazione diretta di array di tipo unknown.
Alla fine ho trovato una soluzione perfetta:
package Test; import java.lang.reflect.Array; /** * * @author QuinnNorris * Crea un array di tipo generico in un metodo generico */ public class Test { public static void main(String[] args) { // TODO Auto-generato metodo stub String a = "ccc";//creazione di una String, come tipo generico String[] ar = creArray(a); for(String art : ar)//stampa del ciclo System.out.println(art); } //Metodo statico generico public static <T> T[] creArray (T obj){ T[] arr = (T[])Array.newInstance(obj.getClass(), 5); arr[1] = obj; System.out.println(arr[1]); return arr; } }
Output del codice come segue:
ccc //Output del metodo arr[1] null //I seguenti 5 sono i valori dell'array iterato nel main ccc null null null
Il metodo sopra descritto è completamente funzionante, abbiamo costruito un array di tipo specificato utilizzando il metodo newInstance della classe Array. Completare questo lavoro utilizzando la reflection dovrebbe essere nel senso del diritto. Poiché il tipo generico T può essere determinato solo in esecuzione, possiamo creare array generici solo cercando di farlo in esecuzione Java, e la tecnologia che può funzionare in esecuzione Java è la reflection.
Inoltre, ho visto null, proprio qui ho organizzato anche la situazione di inizializzazione dei valori degli array di diversi tipi in Java:
Tipo di base (numerico): 0
Tipo di base (booleano): false
Tipo di base (char): (char)0
Tipo di oggetto: null
Grazie per la lettura, spero di essere stato d'aiuto, grazie per il supporto al nostro sito!