Java에서 길이가 0 인 문자열 배열을 어떻게 초기화 할 수 있습니까?


133

메소드의 Java Docs
String[] java.io.File.list(FilenameFilter filter)
는이를 리턴 설명에 포함합니다.

디렉토리가 비어 있거나 필터에서 이름을 승인하지 않으면 배열이 비어 있습니다.

비슷한 작업을 수행하고 문자열 배열 (또는 그 문제에 대한 다른 배열)을 길이가 0으로 초기화하는 방법은 무엇입니까?


7
방금 이것이 바보 같은 질문이라는 것을 깨달았습니다. 다른 사람은 내가 지금처럼 바보일지도 모른다 :)
Ron Tuffin

1
길이가 0 인 배열에 대해 어떤 유스 케이스를 사용하는지, 왜 null특별한 경우에 단순히 초기화하지 않는지에 대해 혼란 스럽습니다 .
Blake

답변:


230

다른 사람들이 말했듯이

new String[0]

실제로 빈 배열을 만듭니다. 그러나 배열에 대한 좋은 점이 있습니다. 크기는 변경할 수 없으므로 항상 동일한 빈 배열 참조를 사용할 수 있습니다. 따라서 코드에서 다음을 사용할 수 있습니다.

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 : 궁극적으로 중요하지 않습니다. 한 곳에만 필요한 경우 해당 클래스에서 선언하십시오. 더 많은 장소에서 필요하다고 생각되면 언제든지 "유틸리티"클래스로 옮길 수 있습니다.
Jon Skeet


18
String[] str = {};

그러나

return {};

유형 정보가 누락되어 작동하지 않습니다.


10
return new String[] { };그리고 return new String[0];두 작품은 것.
Bombe

13

그래, 나는 실제로 답을 찾았지만 어쨌든 질문을 '가져 오기'로 생각했다.

String[] files = new String[0];
또는
int[] files = new int[0];


질문에 그러한 논평을 추가하십시오 ... 또는 같은 것을 대답 한 답변을 선택하십시오.
Jonathan Leffler

6
의견 Jonathan에게 감사합니다. 알다시피이 답변을 다른 사람보다 먼저 게시했습니다 (따라서 선택할 답변이 없습니다). 또한 질문에 대한 답변을 추가하여 더 나은 질문을 만드는 방법을 알지 못합니다.
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.