ฉันจะเริ่มต้นอาร์เรย์สตริงที่มีความยาว 0 ใน Java ได้อย่างไร


134

Java Docs สำหรับวิธีการ
String[] java.io.File.list(FilenameFilter filter)
นี้รวมอยู่ในคำอธิบายผลตอบแทน:

อาร์เรย์จะว่างเปล่าถ้าไดเร็กทอรีว่างเปล่าหรือตัวกรองไม่ยอมรับชื่อ

ฉันจะทำสิ่งที่คล้ายกันและเริ่มต้นอาร์เรย์ String (หรืออาร์เรย์อื่น ๆ สำหรับเรื่องนั้น) ให้มีความยาว 0 ได้อย่างไร


7
ฉันเพิ่งรู้ว่านี่เป็นคำถามโง่ ๆ :( เนื่องจากอาร์เรย์เหล่านี้เริ่มต้นด้วยวิธีเดียวกับอาร์เรย์อื่น ๆ ที่มีขนาด 0 แสดงให้เห็นว่าฉันเริ่มต้นอาร์เรย์บ่อยแค่ไหนในปัจจุบันฉันจะทิ้งคำถามไว้ (ไม่ลบมัน) ทำให้สักวันหนึ่ง คนอื่นอาจจะโง่เหมือนตอนนี้ :)
Ron Tuffin

1
ฉันสับสนเกี่ยวกับกรณีการใช้งานที่คุณมีสำหรับอาร์เรย์ที่มีความยาว 0 และทำไมคุณจะไม่เริ่มใช้nullในกรณีพิเศษ
Blake

คำตอบ:


232

อย่างที่คนอื่น ๆ พูดกันว่า

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

ตกลงฉันพบคำตอบจริง แต่คิดว่าจะ 'นำเข้า' คำถามไปยัง SO อยู่ดี

String[] files = new String[0];
หรือ
int[] files = new int[0];


เพิ่มความเห็นดังกล่าวในคำถามของคุณ ... หรือเลือกหนึ่งในคำตอบที่พูดในทำนองเดียวกัน
Jonathan Leffler

6
ขอบคุณสำหรับความคิดเห็น Jonathan อย่างที่คุณสังเกตว่าฉันโพสต์คำตอบนี้ก่อนใคร (และไม่มีคำตอบให้เลือก) ฉันยังไม่เห็นว่าการเพิ่มคำตอบของคำถามทำให้คำถามดีขึ้นได้อย่างไร
Ron Tuffin

2

คุณสามารถใช้ ArrayUtils.EMPTY_STRING_ARRAY จาก 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

สร้างฟังก์ชันที่จะไม่คืนค่า 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.