Javaで長さ0の文字列配列を初期化するにはどうすればよいですか?


133

メソッドのJavaドキュメントでは、
String[] java.io.File.list(FilenameFilter filter)
これが返品の説明に含まれています。

ディレクトリが空の場合、またはフィルタが名前を受け入れなかった場合、配列は空になります。

同様のことを行い、文字列配列(またはそのほかの配列)を長さ0に初期化するにはどうすればよいですか?


7
私はこれが愚かな質問であることを認識しました:(これらの配列はサイズ0のその他の配列とまったく同じ方法で初期化されているため、最近配列を初期化する頻度を示します。いつか原因を削除するのではなく、質問を残します)他の誰かが私が今いたのと同じくらい愚かかもしれません:)
ロン・タフィン09年

1
長さ0の配列に対してどのようなユースケースがありnull、その特別なケースで単純に初期化しないのはなぜですか。
ブレイク

回答:


230

他の人が言ったように、

new String[0]

確かに空の配列を作成します。ただし、配列には1つの優れた点があります。そのサイズは変更できないため、常に同じ空の配列参照を使用できます。したがって、コードでは次のように使用できます。

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

その後、EMPTY_ARRAY必要になるたびに戻るだけです。毎回新しいオブジェクトを作成する必要はありません。


7
誰もがタイピングが好きなようです:private static final String[] EMPTY_ARRAY = {};
Thomas Jung

8
@トーマス:私はあなたの要点を取り上げますが、この特定のケースでは、より明確な形式を好みます。「この内容の配列が必要です-空です」ではなく、「要素が0の文字列配列が必要」という意味です。個人的な好みだと思います。
Jon Skeet、

1
@Tony-Javaが型を推測できるいくつかの場所を使用する必要があります。:-)
Thomas Jung、

1
@delive:私が提供した例でも空の配列が作成されますが、それは空なので使用できませんEMPTY_ARRAY[0]-存在しない要素0にアクセスしようとしています...
Jon Skeet

1
@theyuv:最終的には問題にはなりません。1つの場所でのみ必要な場合は、そのクラスで宣言します。より多くの場所で必要な場合は、いつでも「ユーティリティ」クラスに移動できます。
Jon Skeet


18
String[] str = {};

だが

return {};

タイプ情報がないため、機能しません。


10
return new String[] { };そして、return new String[0];仕事の両方でしょう。
Bombe

13

わかりました実際に答えを見つけましたが、とにかく質問をSOに「インポート」すると思いました

String[] files = new String[0];
または
int[] files = new int[0];


質問にそのようなコメントを追加してください...または同じことを言った答えの1つを選択してください。
ジョナサンレフラー、

6
コメントジョナサンをありがとう。お気づきかもしれませんが、私はこの回答を誰よりも先に投稿しました(そのため、選択する回答はありませんでした)。また、質問に回答を追加することで、より良い質問ができることもわかりません。
Ron Tuffin

2

org.apache.commons.lang3からArrayUtils.EMPTY_STRING_ARRAYを使用できます

import org.apache.commons.lang3.ArrayUtils;

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

0

nullを返さない関数を作成します。代わりに空の配列を返します。理解するためにコードの下を通過できます。

    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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.