Wie kann ich ein String-Array mit der Länge 0 in Java initialisieren?


132

Die Java-Dokumente für die Methode
String[] java.io.File.list(FilenameFilter filter)
enthalten dies in der Beschreibung der Rückgabe:

Das Array ist leer, wenn das Verzeichnis leer ist oder wenn vom Filter keine Namen akzeptiert wurden.

Wie mache ich etwas Ähnliches und initialisiere ein String-Array (oder ein anderes Array) mit einer Länge von 0?


7
Ich habe gerade festgestellt, dass dies eine dumme Frage ist :( Da diese Arrays genauso wie jedes andere Array mit einer Größe von 0 initialisiert werden, wird angezeigt, wie oft ich Arrays heutzutage initialisiere. Ich werde die Frage eines Tages belassen (nicht löschen) jemand anderes könnte genauso dumm sein wie ich gerade :)
Ron Tuffin

1
Ich bin verwirrt darüber, welchen Anwendungsfall Sie für ein Array mit der Länge 0 haben würden und warum Sie nullin diesem speziellen Fall nicht einfach damit beginnen würden .
Blake

Antworten:


229

Wie andere gesagt haben,

new String[0]

wird in der Tat ein leeres Array erstellen. Es gibt jedoch eine nette Sache bei Arrays: Ihre Größe kann sich nicht ändern, sodass Sie immer dieselbe leere Array-Referenz verwenden können. In Ihrem Code können Sie also Folgendes verwenden:

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

und kehren EMPTY_ARRAYSie dann jedes Mal zurück, wenn Sie es benötigen - Sie müssen nicht jedes Mal ein neues Objekt erstellen.


7
Es scheint, dass jeder gerne tippt:private static final String[] EMPTY_ARRAY = {};
Thomas Jung

8
@ Thomas: Ich verstehe Ihren Standpunkt, aber für diesen speziellen Fall bevorzuge ich die explizitere Form. Mir ist klarer, dass es bedeutet "Ich möchte ein String-Array mit 0 Elementen" anstatt "Ich möchte ein Array mit diesem Inhalt - der leer ist". Nur persönliche Vorlieben, denke ich.
Jon Skeet

1
@ Tony - Ich muss die wenigen Stellen verwenden, an denen Java auf einen Typ schließen kann. :-)
Thomas Jung

1
@delive: Das Beispiel, das ich bereitgestellt habe, erstellt immer noch ein leeres Array, aber da es leer ist, können Sie es nicht verwenden EMPTY_ARRAY[0]- das versucht, auf Element 0 zuzugreifen, das nicht existiert ...
Jon Skeet

1
@theyuv: Letztendlich wird es keine Rolle spielen. Wenn Sie es nur an einer Stelle benötigen, deklarieren Sie es in dieser Klasse. Wenn Sie feststellen, dass Sie es an mehreren Stellen benötigen, können Sie es jederzeit in eine "Utility" -Klasse verschieben.
Jon Skeet


18
String[] str = {};

Aber

return {};

funktioniert nicht, da die Typinformationen fehlen.


10
return new String[] { };und return new String[0];würde beide funktionieren.
Bombe

13

Ok, ich habe die Antwort tatsächlich gefunden, dachte aber, ich würde die Frage trotzdem in SO "importieren"

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


Fügen Sie Ihrer Frage einen solchen Kommentar hinzu ... oder wählen Sie eine der Antworten aus, die dasselbe sagten.
Jonathan Leffler

6
Danke für den Kommentar Jonathan. Wie Sie vielleicht bemerkt haben, habe ich diese Antwort vor allen anderen gepostet (und als solche gab es keine Antworten zur Auswahl). Ich sehe auch nicht, wie das Hinzufügen der Antwort auf die Frage zu einer besseren Frage führt.
Ron Tuffin

2

Sie können ArrayUtils.EMPTY_STRING_ARRAY aus org.apache.commons.lang3 verwenden

import org.apache.commons.lang3.ArrayUtils;

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

0

Erstellen Sie eine Funktion, die nicht null zurückgibt, sondern ein leeres Array, das Sie zum Verständnis durch den folgenden Code gehen können.

    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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.