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.