Java'da uzunluğu 0 olan bir String dizisini nasıl başlatabilirim?


133

Yöntem için Java Belgeleri
String[] java.io.File.list(FilenameFilter filter)
, iade açıklamasına şunu içerir:

Dizin boşsa veya filtre tarafından hiçbir isim kabul edilmediyse dizi boş olacaktır.

Nasıl benzer bir şey yaparım ve bir String dizisini (veya bu konuda başka bir diziyi) 0 uzunluğuna sahip olacak şekilde nasıl başlatırım?


7
Bunun aptalca bir soru olduğunu yeni fark ettim :( Bu diziler sadece 0 boyutundaki diğer dizilerle aynı şekilde başlatıldığından, bugünlerde dizileri ne sıklıkla başlattığımı gösterir. Soruyu bırakacağım (silmeyeceğim) çünkü bir gün bir başkası da benim kadar aptal olabilir :)
Ron Tuffin

1
0 uzunluklu bir dizi için hangi kullanım durumunun olacağı ve nullbu özel durumda neden basitçe başlatmayacağınız konusunda kafam karıştı .
Blake

Yanıtlar:


230

Başkalarının dediği gibi,

new String[0]

aslında boş bir dizi yaratacaktır. Bununla birlikte, dizilerle ilgili güzel bir şey vardır - boyutları değişemez, böylece her zaman aynı boş dizi referansını kullanabilirsiniz. Yani kodunuzda şunları kullanabilirsiniz:

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

ve sonra EMPTY_ARRAYihtiyacınız olan her seferinde geri dönün - her seferinde yeni bir nesne oluşturmanıza gerek yoktur.


7
Görünüşe göre herkes yazmayı seviyor:private static final String[] EMPTY_ARRAY = {};
Thomas Jung

8
@Thomas: Senin fikrini alıyorum, ancak bu özel durum için daha açık formu tercih ediyorum. Bana göre, "Bu içeriğe sahip bir dizi istiyorum - ki bu boş" yerine "0 öğeli bir dizi istiyorum" anlamına geliyor. Sanırım sadece kişisel tercih.
Jon Skeet

1
@Tony - Java'nın bir tür çıkarabileceği birkaç yeri kullanmam gerekiyor. :-)
Thomas Jung

1
@delive: Sağladığımız örnek hala boş bir dizi oluşturur, ancak içi boş, çünkü kullanamazsınız EMPTY_ARRAY[0]- varolmayan erişim elemanı 0, ... çalışıyor
Jon Skeet

1
@theyuv: Sonuçta önemli olmayacak. Tek bir yerde ihtiyacınız varsa, o sınıfta beyan edin. Daha fazla yerde ihtiyacınız olduğunu fark ederseniz, onu her zaman bir "yardımcı program" sınıfına taşıyabilirsiniz.
Jon Skeet


18
String[] str = {};

Fakat

return {};

tür bilgisi eksik olduğundan çalışmaz.


10
return new String[] { };ve return new String[0];ikisi de işe yarar.
Bombe

13

Tamam, aslında cevabı buldum ama soruyu yine de SO'ya aktaracağımı düşündüm

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


Sorunuza böyle bir yorum ekleyin ... veya aynı şeyi söyleyen cevaplardan birini seçin.
Jonathan Leffler

6
Yorumunuz için teşekkürler Jonathan. Fark etmiş olabileceğiniz gibi, bu yanıtı herkesten önce gönderdim (ve bu nedenle seçilecek yanıt yoktu). Ayrıca soruya cevabı eklemenin nasıl daha iyi bir soru olduğunu anlamıyorum.
Ron Tuffin

2

ArrayUtils.EMPTY_STRING_ARRAY'i org.apache.commons.lang3 adresinden kullanabilirsiniz.

import org.apache.commons.lang3.ArrayUtils;

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

0

Null döndürmeyecek bir işlev yapın, bunun yerine anlamak için aşağıdaki kodu inceleyebileceğiniz boş bir dizi döndürün.

    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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.