שימוש מהיר ב- FilenameFilter

1. הקדמה

ל- Java היו ממשקים פונקציונליים לפני הוספת ההערה האינפורמטיבית, @FunctionalInterface. FilenameFilter הוא ממשק אחד כזה.

אנו נסתכל בקצרה על השימוש בו ונבין היכן הוא משתלב בעולם ג'אווה כיום.

2. FilenameFilter

מאז זהו ממשק פונקציונלי - עלינו לקבל שיטה מופשטת אחת בדיוק, ו FilenameFilter עוקב אחר הגדרה זו:

קבל בוליאני (קובץ dir, שם מחרוזת);

3. שימוש

אנו משתמשים FilenameFilter כמעט אך ורק כדי לרשום את כל הקבצים - המספקים את המסנן שצוין - בתוך ספריה.

העמוסים רשימה(..) ו listFiles (..) שיטות ב java.io. קובץ קח מופע של FilenameFilter ולהחזיר מַעֲרָך מכל הקבצים המספקים את המסנן.

מקרה הבדיקה הבא מסנן את כל ג'סון קבצים בספריה:

@ מבחן ציבורי בטל כאשר FilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, name) -> name.endsWith (". Json"); מחרוזת [] expectFiles = {"people.json", "students.json"}; ספריית קבצים = קובץ חדש (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); מחרוזת [] actualFiles = directory.list (filter); Assert.assertArrayEquals (expectFiles, actualFiles); }

3.1. FileFilter כפי ש BiPredicate

אורקל הוסיפה יותר מ -40 ממשקים פונקציונליים בג'אווה 8, ובניגוד לממשקים מדור קודם, אלה הם כלליים. פירוש הדבר שנוכל להשתמש בהם לכל סוג התייחסות.

BiPredicate היה ממשק אחד כזה. לשיטה 'מופשטת אחת' יש הגדרה זו:

מבחן בוליאני (T t, U u);

מה זה אומר זה FilenameFilter הוא רק מקרה מיוחד של BiPredicate איפה ט הוא קוֹבֶץ ו U הוא חוּט.

4. מסקנה

למרות שיש לנו עכשיו גנריות לְבַסֵס ו BiPredicate ממשקים פונקציונליים, נמשיך לראות התרחשויות של FilenameFilter פשוט משום שהוא היה בשימוש בספריות Java קיימות.

כמו כן, היא משרתת את מטרתה היחידה היטב, ולכן אין סיבה שלא להשתמש בה במידת הצורך.

כמו תמיד, כל הדוגמאות זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found