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.


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