Rýchle použitie FilenameFilter

1. Úvod

Java mala funkčné rozhrania pred pridaním informačnej anotácie, @Funkčné rozhranie. FilenameFilter je jedno také rozhranie.

V krátkosti sa pozrieme na jeho použitie a pochopíme, kam sa dnes vo svete Java hodí.

2. FilenameFilter

Odkedy toto je funkčné rozhranie - musíme mať presne jednu abstraktnú metódua FilenameFilter sleduje túto definíciu:

boolean akceptovať (adresár súboru, názov reťazca);

3. Použitie

Používame FilenameFilter takmer výlučne na zoznam všetkých súborov v adresári, ktoré vyhovujú určenému filtru.

Preťažený zoznam (..) a listFiles (..) metódy v java.io.Súbor vziať príklad z FilenameFilter a vrátiť pole všetkých súborov, ktoré vyhovujú filtru.

Nasledujúci testovací prípad filtruje všetky položky json súbory v adresári:

@Test public void whenFilteringFilesEndingWithJson_thenEqualExectedFiles () {FilenameFilter filter = (dir, name) -> name.endsWith (". Json"); Reťazec [] expectFiles = {"people.json", "students.json"}; Adresár súborov = nový File (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); Reťazec [] actualFiles = adresár.list (filter); Assert.assertArrayEquals (expectFiles, actualFiles); }

3.1. FileFilter ako BiPredicate

Spoločnosť Oracle pridala do Java 8 viac ako 40 funkčných rozhraní a na rozdiel od starších rozhraní sú tieto všeobecné. To znamenalo, že sme ich mohli použiť pre akýkoľvek referenčný typ.

BiPredicate bolo jedno také rozhranie. Jeho „jediná abstraktná metóda má túto definíciu:

boolovský test (T t, U u);

Čo to znamená, je to FilenameFilter je len zvláštny prípad BiPredicate kde T je Súbor a U je String.

4. Záver

Aj keď teraz máme generické Predikát a BiPredicate funkčných rozhraní, budeme naďalej sledovať výskyty FilenameFilter jednoducho preto, že sa používa v existujúcich knižniciach Java.

Rovnako dobre slúži svojmu jedinému účelu, takže nie je dôvod ho v prípade potreby nepoužívať.

Všetky príklady sú ako vždy k dispozícii na GitHub.


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