Rask bruk av FilenameFilter
1. Introduksjon
Java har hatt funksjonelle grensesnitt før tillegg av den informative kommentaren, @FunctionalInterface. FilnavnFilter er et slikt grensesnitt.
Vi tar en kort titt på bruken av den og forstår hvor den passer i Java-verdenen i dag.
2. FilnavnFilter
Siden dette er et funksjonelt grensesnitt - vi må ha nøyaktig en abstrakt metode, og FilnavnFilter følger denne definisjonen:
boolsk aksept (File dir, String name);
3. Bruk
Vi bruker FilnavnFilter nesten utelukkende for å liste opp alle filer - som tilfredsstiller det angitte filteret - i en katalog.
Den overbelastede liste(..) og listFiles (..) metoder i java.io. fil ta en forekomst av FilnavnFilter og returner en array av alle filene som tilfredsstiller filteret.
Følgende testtilfelle filtrerer alle json filer i en katalog:
@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 la til mer enn 40 funksjonelle grensesnitt i Java 8, og i motsetning til eldre grensesnitt er disse generiske. Det betydde at vi kunne bruke dem til alle typer referanser.
BiPredicate var et slikt grensesnitt. Sin 'enkelt abstrakte metode har denne definisjonen:
boolsk test (T t, U u);
Hva dette betyr er at FilnavnFilter er bare et spesielt tilfelle av BiPredicate hvor T er Fil og U er String.
4. Konklusjon
Selv om vi nå har generiske Predikere og BiPredicate funksjonelle grensesnitt, vil vi fortsette å se forekomster av FilnavnFilter rett og slett fordi den har vært i bruk i eksisterende Java-biblioteker.
Det tjener også sitt eneste formål, så det er ingen grunn til ikke å bruke det når det er aktuelt.
Som alltid er alle eksemplene tilgjengelige på GitHub.