Làm cách nào tôi có thể khởi tạo một mảng String có độ dài 0 trong Java?


132

Tài liệu Java cho phương thức
String[] java.io.File.list(FilenameFilter filter)
bao gồm điều này trong mô tả trả về:

Mảng sẽ trống nếu thư mục trống hoặc nếu không có tên nào được bộ lọc chấp nhận.

Làm cách nào để tôi thực hiện một điều tương tự và khởi tạo một mảng String (hoặc bất kỳ mảng nào khác cho vấn đề đó) để có độ dài 0?


7
Tôi mới nhận ra đây là một câu hỏi ngu ngốc :( Vì các mảng này được khởi tạo chính xác giống như bất kỳ mảng nào khác chỉ với kích thước 0. Cho thấy tần suất tôi khởi tạo mảng hiện nay. Tôi sẽ để lại câu hỏi (không xóa nó) vào một ngày nào đó một người khác có thể ngu ngốc như tôi lúc này :)
Ron Tuffin

1
Tôi bối rối về trường hợp sử dụng mà bạn sẽ có cho một mảng có độ dài 0 và tại sao bạn không đơn giản bắt đầu nulltrong trường hợp đặc biệt đó.
Blake

Câu trả lời:


229

Như những người khác đã nói,

new String[0]

thực sự sẽ tạo ra một mảng trống Tuy nhiên, có một điều hay về mảng - kích thước của chúng không thể thay đổi, vì vậy bạn luôn có thể sử dụng cùng một tham chiếu mảng trống. Vì vậy, trong mã của bạn, bạn có thể sử dụng:

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

và sau đó chỉ cần trả lại EMPTY_ARRAYmỗi khi bạn cần nó - không cần phải tạo một đối tượng mới mỗi lần.


7
Dường như mọi người đều thích gõ:private static final String[] EMPTY_ARRAY = {};
Thomas Jung

8
@Thomas: Tôi có quan điểm của bạn, nhưng đối với trường hợp cụ thể này, tôi thích hình thức rõ ràng hơn. Nó rõ ràng hơn với tôi rằng nó có nghĩa là "Tôi muốn một mảng chuỗi có 0 phần tử" chứ không phải "Tôi muốn một mảng có nội dung này - trống." Tôi đoán chỉ là sở thích cá nhân.
Jon Skeet

1
@Tony - Tôi phải sử dụng một vài nơi mà Java có thể suy ra một loại. :-)
Thomas Jung

1
@delive: Ví dụ tôi đã cung cấp sẽ vẫn tạo một mảng trống, nhưng vì nó trống nên bạn không thể sử dụng EMPTY_ARRAY[0]- đó là cố gắng truy cập phần tử 0, không tồn tại ...
Jon Skeet

1
@theyuv: Rốt cuộc nó không thành vấn đề. Nếu bạn chỉ cần nó ở một nơi, hãy khai báo nó trong lớp đó. Nếu bạn thấy bạn cần nó ở nhiều nơi hơn, bạn luôn có thể di chuyển nó đến một lớp "tiện ích".
Jon Skeet


18
String[] str = {};

Nhưng

return {};

sẽ không hoạt động vì thông tin loại bị thiếu.


10
return new String[] { };return new String[0];cả hai sẽ làm việc.
Bombe

13

Ok tôi thực sự đã tìm thấy câu trả lời nhưng nghĩ rằng tôi sẽ 'nhập' câu hỏi vào SO

String[] files = new String[0];
hoặc là
int[] files = new int[0];


Thêm bình luận như vậy vào câu hỏi của bạn ... hoặc chọn một trong những câu trả lời tương tự.
Jonathan Leffler

6
Cảm ơn vì bình luận Jonathan. Như bạn có thể nhận thấy tôi đã đăng câu trả lời này trước bất kỳ ai khác (và như vậy không có câu trả lời nào để chọn). Tôi cũng không thấy cách thêm câu trả lời cho câu hỏi làm cho câu hỏi hay hơn.
Ron Tuffin

2

Bạn có thể sử dụng ArrayUtils.EMPTY_STRING_ARRAY từ org.apache.commons.lang3

import org.apache.commons.lang3.ArrayUtils;

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

0

Tạo một hàm sẽ không trả về null thay vào đó trả về một mảng trống mà bạn có thể đi qua đoạn mã dưới đây để hiểu.

    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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.