Hurtig brug af filnavnFilter
1. Introduktion
Java har haft funktionelle grænseflader inden tilføjelsen af den informative kommentar, @FunktionelInterface. FilnavnFilter er en sådan grænseflade.
Vi tager et kort kig på brugen og forstå, hvor det passer i Java-verdenen i dag.
2. FilnavnFilter
Siden dette er en funktionel grænseflade - vi skal have nøjagtigt en abstrakt metodeog FilnavnFilter følger denne definition:
boolsk accept (File dir, String name);
3. Anvendelse
Vi bruger FilnavnFilter næsten udelukkende for at liste alle filer - der opfylder det angivne filter - i en mappe.
Den overbelastede liste(..) og listFiles (..) metoder i java.io-fil tage en instans af FilnavnFilter og returner en array af alle filer, der tilfredsstiller filteret.
Følgende testcase filtrerer alle json filer i et bibliotek:
@Test offentlig ugyldig nårFilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, name) -> name.endsWith (". Json"); String [] expectFiles = {"people.json", "students.json"}; Filkatalog = ny fil (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); Streng [] actualFiles = katalog.liste (filter); Assert.assertArrayEquals (expectFiles, actualFiles); }
3.1. FileFilter som BiPredicate
Oracle tilføjede mere end 40 funktionelle grænseflader i Java 8, og i modsætning til ældre grænseflader er disse generiske. Det betød, at vi kunne bruge dem til enhver referencetype.
BiPredicate var en sådan grænseflade. Dens 'enkelt abstrakte metode har denne definition:
boolsk test (Tt, U u);
Hvad dette betyder er, at FilnavnFilter er bare et specielt tilfælde af BiPredicate hvor T er Fil og U er Snor.
4. Konklusion
Selvom vi nu har generiske Prædikat og BiPredicate funktionelle grænseflader, vil vi fortsat se forekomster af FilnavnFilter simpelthen fordi det har været i brug i eksisterende Java-biblioteker.
Det tjener også sit eneste formål godt, så der er ingen grund til ikke at bruge det, når det er relevant.
Som altid er alle eksemplerne tilgængelige på GitHub.