2009-11-03 15 views
91

Java Docs dla metody
String[] java.io.File.list(FilenameFilter filter)
Obejmuje to w opisie Powroty:Jak zainicjować tablicę ciągów o długości 0 w języku Java?

Tablica będzie pusta, jeśli katalog jest pusty lub jeśli nie ma nazwy zostały zaakceptowane przez filtr.

Jak zrobić coś podobnego i zainicjować tablicę ciągów (lub inną tablicę), aby mieć długość 0?

+6

Właśnie uświadomiłem sobie, że jest to głupie pytanie :(Jak te tablice są inicjowane dokładnie tak samo, jak każdy inny tylko tablicę o rozmiarze 0. Pokazuje, jak często zainicjować tablice w dzisiejszych czasach. Zostawię to pytanie (nie usuwaj go) bo pewnego dnia ktoś inny może być tak głupi jak ja właśnie teraz :) –

Odpowiedz

160

Jak inni twierdzą,

new String[0] 

istotnie tworzy pustą tablicę. Jest jednak jedna fajna cecha tablic - ich rozmiar nie może się zmienić, więc zawsze możesz użyć tego samego pustego odwołania do tablicy. Tak w kodzie, można użyć:

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

a potem po prostu wrócić EMPTY_ARRAY za każdym razem jest to potrzebne - nie ma potrzeby tworzenia nowego obiektu za każdym razem.

+6

Wygląda na to, że wszyscy lubią pisać: 'private static final String [] EMPTY_ARRAY = {};' –

+7

@Thomas: Rozumiem, ale w tym przypadku wolę bardziej wyraźną formę. Dla mnie bardziej zrozumiałe jest to, że znaczy "chcę tablicę ciągów z 0 elementami", a nie "Chcę tablicę z tą zawartością - która jest pusta". Tylko moje osobiste preferencje. –

+1

@ Tony - Muszę użyć kilku miejsc, w których Java może określić typ. :-) –

9

Ok I rzeczywiście znaleźć odpowiedź, ale myślałem, że 'przywóz' pytanie do SO i tak

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

+0

Dodaj taki komentarz do swojego pytania ... lub wybierz jedną z odpowiedzi, które mówiły to samo. –

+4

Dzięki za komentarz Jonathan. Jak mogłeś zauważyć, wysłałem tę odpowiedź przed nikim innym (i jako takie nie było odpowiedzi do wyboru). Nie widzę też, jak dodanie odpowiedzi na pytanie sprawia, że ​​jest lepsze pytanie. –

14
String[] str = {}; 

Ale

return {}; 

nie będzie działać, gdy informacja o typie brakuje.

+9

'return new String [] {};' i 'return new String [0];' będą działać. – Bombe

0

Utwórz funkcję, która nie zwróci wartości null, a zamiast niej zwróci pustą tablicę, którą możesz zrozumieć poniżej.

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; 
} 
Powiązane problemy