Brza upotreba FilenameFilter

1. Uvod

Java je imala funkcionalna sučelja prije dodavanja informativne napomene, @FunctionalInterface. FilenameFilter je jedno takvo sučelje.

Kratko ćemo pogledati njegovu upotrebu i shvatiti gdje se danas uklapa u svijet Jave.

2. FilenameFilter

Od ovo je funkcionalno sučelje - moramo imati točno jednu apstraktnu metodu, i FilenameFilter slijedi ovu definiciju:

logičko prihvaćanje (dir datoteke, naziv niza);

3. Upotreba

Koristimo FilenameFilter gotovo isključivo za popis svih datoteka - koje zadovoljavaju navedeni filtar - unutar direktorija.

Preopterećeni popis(..) i listFiles (..) metode u java.io.Datoteka uzeti primjer FilenameFilter i vratite an niz svih datoteka koje zadovoljavaju filtar.

Sljedeći testni slučaj filtrira sve json datoteke u direktoriju:

@Test public void whenFilteringFilesEndingWithJson_thenEqualExpectedFiles () {FilenameFilter filter = (dir, name) -> name.endsWith (". Json"); String [] očekivane datoteke = {"people.json", "students.json"}; Direktorij datoteke = nova datoteka (getClass (). GetClassLoader () .getResource ("testFolder") .getFile ()); String [] actualFiles = directory.list (filter); Assert.assertArrayEquals (očekivane datoteke, stvarne datoteke); }

3.1. FileFilter kao BiPredicate

Oracle je u Java 8 dodao više od 40 funkcionalnih sučelja, a za razliku od naslijeđenih sučelja, to su generička sučelja. To je značilo da ih možemo koristiti za bilo koji referentni tip.

BiPredicate bilo jedno takvo sučelje. Njegova 'jednostruka apstraktna metoda ima sljedeću definiciju:

booleov test (T t, U u);

Što ovo znači je to FilenameFilter je samo poseban slučaj BiPredicate gdje T je Datoteka i U je Niz.

4. Zaključak

Iako sada imamo generičke Predikat i BiPredicate funkcionalna sučelja, nastavit ćemo vidjeti pojave FilenameFilter jednostavno zato što se koristi u postojećim Java knjižnicama.

Također, služi svojoj jedinstvenoj svrsi, pa nema razloga da ga ne upotrebljavate kad je primjenjivo.

Kao i uvijek, svi su primjeri dostupni na GitHubu.


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