Come posso inizializzare un array String con lunghezza 0 in Java?


133

Java Docs per il metodo
String[] java.io.File.list(FilenameFilter filter)
include questo nella descrizione dei resi:

L'array sarà vuoto se la directory è vuota o se il filtro non ha accettato alcun nome.

Come posso fare una cosa simile e inizializzare un array String (o qualsiasi altro array per quella materia) per avere una lunghezza 0?


7
Ho appena realizzato che questa è una domanda stupida :( Poiché questi array sono inizializzati esattamente allo stesso modo di qualsiasi altro array con una dimensione 0. Mostra la frequenza con cui inizializzo gli array al giorno d'oggi. Lascerò la domanda (non eliminarla) perché un giorno qualcun altro potrebbe essere tanto stupido quanto lo ero io adesso :)
Ron Tuffin,

1
Sono confuso su quale caso d'uso avresti per un array di lunghezza 0 e perché non inizieresti semplicemente nullin quel caso speciale.
Blake

Risposte:


230

Come altri hanno già detto,

new String[0]

creerà davvero un array vuoto. Tuttavia, c'è una bella cosa sugli array: le loro dimensioni non possono cambiare, quindi puoi sempre usare lo stesso riferimento di array vuoto. Quindi nel tuo codice puoi usare:

private static final String[] EMPTY_ARRAY = new String[0];

e poi ritorna EMPTY_ARRAYogni volta che ne hai bisogno: non è necessario creare un nuovo oggetto ogni volta.


7
Sembra che a tutti piaccia scrivere:private static final String[] EMPTY_ARRAY = {};
Thomas Jung,

8
@Thomas: prendo la tua opinione, ma per questo caso particolare preferisco la forma più esplicita. Per me è più chiaro che significa "Voglio un array di stringhe con 0 elementi" anziché "Voglio un array con questo contenuto - che è vuoto". Solo preferenze personali immagino.
Jon Skeet,

1
@Tony - Devo usare i pochi posti in cui Java può inferire un tipo. :-)
Thomas Jung,

1
@delive: L'esempio che ho fornito creerà comunque un array vuoto, ma poiché è vuoto, non puoi usarlo EMPTY_ARRAY[0]- questo sta provando ad accedere all'elemento 0, che non esiste ...
Jon Skeet

1
@theyuv: Alla fine non importa. Se ne hai bisogno in un solo posto, dichiaralo in quella classe. Se ritieni di averne bisogno in più punti, puoi sempre spostarlo in una classe di "utilità".
Jon Skeet,


18
String[] str = {};

Ma

return {};

non funzionerà poiché mancano le informazioni sul tipo.


10
return new String[] { };e return new String[0];funzionerebbe entrambi.
Bombe,

13

Ok, ho effettivamente trovato la risposta, ma ho pensato che avrei comunque importato la domanda in SO

String[] files = new String[0];
o
int[] files = new int[0];


Aggiungi tale commento alla tua domanda ... o seleziona una delle risposte che ha detto la stessa cosa.
Jonathan Leffler,

6
Grazie per il commento Jonathan. Come avrai notato, ho pubblicato questa risposta prima di chiunque altro (e come tale non c'erano risposte da selezionare). Inoltre non vedo come l'aggiunta della risposta alla domanda possa rendere una domanda migliore.
Ron Tuffin,

2

Puoi usare ArrayUtils.EMPTY_STRING_ARRAY da org.apache.commons.lang3

import org.apache.commons.lang3.ArrayUtils;

    class Scratch {
        public static void main(String[] args) {
            String[] strings = ArrayUtils.EMPTY_STRING_ARRAY;
        }
    }

0

Crea una funzione che non restituirà null invece restituirà un array vuoto che puoi leggere sotto il codice per capire.

    public static String[] getJavaFileNameList(File inputDir) {
    String[] files = inputDir.list(new FilenameFilter() {
        @Override
        public boolean accept(File current, String name) {
            return new File(current, name).isFile() && (name.endsWith("java"));
        }
    });

    return files == null ? new String[0] : files;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.