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.