2009-11-03 5 views
91

Die Java-Docs für die Methode
String[] java.io.File.list(FilenameFilter filter)
enthält diese in der Beschreibung zurückkehrt:Wie kann ich ein String-Array mit der Länge 0 in Java initialisieren?

Das Array leer sein wird, wenn das Verzeichnis leer ist, oder wenn keine Namen durch den Filter aufgenommen wurden.

Wie mache ich eine ähnliche Sache und initialisiere ein String-Array (oder ein anderes Array für diese Angelegenheit) mit einer Länge von 0?

+6

Ich habe gerade dies eine dumme Frage ist :(Da diese Felder mit einer Größe 0 genau die gleiche Art und Weise wie jedes andere Array initialisiert werden, zeigt nur, wie oft initialisieren ich heute Arrays. Ich werde die Frage verlassen (lösche es nicht) denn eines Tages könnte jemand anderes genauso dumm sein wie ich gerade war :) –

Antwort

160

Wie andere gesagt haben,

new String[0] 

wird in der Tat ein leeres Array erstellen. Allerdings gibt es eine nette Sache über Arrays - ihre Größe kann sich nicht ändern, so dass Sie immer den gleichen leeren Array-Verweis verwenden können. Also in Ihrem Code können Sie verwenden:

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

und dann EMPTY_ARRAY nur zurückgeben jedes Mal, wenn Sie es brauchen - es gibt keine Notwendigkeit, ein neues Objekt jedes Mal zu erstellen.

+6

Es scheint, dass jeder gerne tippen: 'private statische final String [] EMPTY_ARRAY = {};' –

+7

@Thomas: Ich nehme Ihren Punkt, aber für diesen speziellen Fall bevorzuge ich die explizite Form. Es ist für mich klarer, dass es bedeutet "Ich möchte ein String-Array mit 0 Elementen" anstelle von "Ich möchte ein Array mit diesem Inhalt - der leer ist". Nur persönliche Präferenz, denke ich. –

+1

@Tony - Ich muss die wenigen Stellen verwenden, wo Java auf einen Typ schließen kann. :-) –

9

Ok Ich fand die Antwort aber dachte, ich würde 'importieren' die Frage in SO ohnehin

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

+0

Füge einen Kommentar zu deiner Frage hinzu ... oder wähle eine der Antworten aus, die dasselbe sagten. –

+4

Danke für den Kommentar Jonathan. Wie Sie vielleicht bemerkt haben, habe ich diese Antwort vor allen anderen veröffentlicht (und als solche gab es keine Antworten zu wählen). Ich sehe auch nicht, wie das Hinzufügen der Antwort zu einer besseren Frage führt. –

18

String[] str = new String[0];?

14
String[] str = {}; 

Aber

return {}; 

wird nicht funktionieren, da die Typinformation fehlt.

+9

'return new String [] {};' und 'return new String [0];' würde beides funktionieren. – Bombe

0

Erstellen Sie eine Funktion, die nicht null zurückgibt, sondern ein leeres Array zurückgibt, das Sie unter dem folgenden Code verstehen 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; 
} 
Verwandte Themen