Bagaimana saya bisa menginisialisasi array String dengan panjang 0 di Java?

133

Java Docs untuk metode
String[] java.io.File.list(FilenameFilter filter)
menyertakan ini dalam deskripsi pengembalian:

Array akan kosong jika direktori kosong atau jika tidak ada nama yang diterima oleh filter.

Bagaimana cara saya melakukan hal serupa dan menginisialisasi array String (atau array lain dalam hal ini) untuk memiliki panjang 0?

Ron Tuffin
sumber
7
Saya baru menyadari ini adalah pertanyaan bodoh :( Karena array ini diinisialisasi dengan cara yang persis sama dengan array lainnya hanya dengan ukuran 0. Menunjukkan seberapa sering saya menginisialisasi array saat ini. Saya akan meninggalkan pertanyaan (tidak menghapusnya) karena suatu hari nanti orang lain mungkin sama bodohnya seperti saya sekarang :)
Ron Tuffin
1
Saya bingung tentang apa yang Anda gunakan case untuk array dengan panjang 0, dan mengapa Anda tidak akan hanya init nulldalam kasus khusus itu.
Blake

Jawaban:

230

Seperti yang orang lain katakan,

new String[0]

memang akan membuat array kosong. Namun, ada satu hal yang menyenangkan tentang array - ukurannya tidak dapat berubah, sehingga Anda selalu dapat menggunakan referensi array kosong yang sama. Jadi dalam kode Anda, Anda dapat menggunakan:

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

dan kemudian kembali saja EMPTY_ARRAYsetiap kali Anda membutuhkannya - tidak perlu membuat objek baru setiap kali.

Jon Skeet
sumber
7
Tampaknya semua orang suka mengetik:private static final String[] EMPTY_ARRAY = {};
Thomas Jung
8
@ Thomas: Saya mengerti maksud Anda, tetapi untuk kasus khusus ini saya lebih suka bentuk yang lebih eksplisit. Lebih jelas bagi saya bahwa itu berarti "Saya ingin array string dengan 0 elemen" daripada "Saya ingin array dengan konten ini - yang kosong". Hanya preferensi pribadi kurasa.
Jon Skeet
1
@ Tony - Saya harus menggunakan beberapa tempat di mana Java dapat menyimpulkan suatu tipe. :-)
Thomas Jung
1
@delive: Contoh yang saya berikan masih akan membuat array kosong, tetapi karena kosong, Anda tidak dapat menggunakan EMPTY_ARRAY[0]- itu mencoba mengakses elemen 0, yang tidak ada ...
Jon Skeet
1
@ theyuv: Pada akhirnya itu tidak masalah. Jika Anda hanya membutuhkannya di satu tempat, nyatakan di kelas itu. Jika Anda merasa membutuhkannya di lebih banyak tempat, Anda selalu dapat memindahkannya ke kelas "utilitas".
Jon Skeet
23

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

mauris
sumber
18
String[] str = {};

Tapi

return {};

tidak akan berfungsi karena informasi jenis tidak ada.

Thomas Jung
sumber
10
return new String[] { };dan return new String[0];keduanya akan bekerja.
Bombe
13

Ok saya sebenarnya menemukan jawabannya tetapi saya pikir saya akan 'mengimpor' pertanyaan itu ke SO

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

Ron Tuffin
sumber
Tambahkan komentar seperti itu ke pertanyaan Anda ... atau pilih salah satu jawaban yang mengatakan hal yang sama.
Jonathan Leffler
6
Terima kasih atas komentarnya Jonathan. Seperti yang mungkin Anda perhatikan saya memposting jawaban ini sebelum orang lain (dan karena itu tidak ada jawaban untuk dipilih). Saya juga tidak melihat bagaimana menambahkan jawaban pada pertanyaan membuat pertanyaan yang lebih baik.
Ron Tuffin
2

Anda dapat menggunakan ArrayUtils.EMPTY_STRING_ARRAY dari org.apache.commons.lang3

import org.apache.commons.lang3.ArrayUtils;

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

Buatlah fungsi yang tidak akan mengembalikan null sebagai gantinya mengembalikan array kosong yang bisa Anda pahami di bawah kode.

    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;
}
Swapnil Gangrade
sumber