English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata della costruzione di array con parametri generici in Java e esempi

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!

Ti potrebbe interessare