Wyjaśnimy sobie kolejny interfejs funkcyjny występujący w języku Java pod nazwą "Supplier"! Zobaczysz kiedy warto go zastosować i w jakich sytuacjach. A wszystko zostanie zwieńczone prostym przykładowym kodem 😊. Zapraszam!
"SUPPLIER" W JĘZYKU JAVA "DOSTARCZY" CI NOWYCH MOŻLIWOŚCI
Interfejs funkcyjny "Supplier", to następny o jakim chcę coś napisać. Bywa, że do definicji Twojej metody zechcesz wstawić dowolną definicję metody zwracającą jakąś wartość (w postaci wyrażenia lambda), gdy pojawi się potrzeba wywołania metody "rodzimej". Jednocześnie wiesz, że podczas wywoływania metody, nie chcesz wprowadzać parametrów formalnych.
Wtedy właśnie dobrze jest wybrać "dostawcę", ponieważ oczekuje podania jedynego typu w miejsce typu generycznego (w nawiasach kątowych) jaki będzie reprezentować wartość na wyjściu, natomiast nie przyjmuje żadnych danych wejściowych.
"Supplier" w języku Java jest jednym z wielu występujących interfejsów funkcyjnych przydatnych do wstawiania w miejsce definicji metod. Wśród znanych, warto znać poniższe:
- "Consumer" (metoda typu "void" przyjmująca jeden parametr),
- "Function" (metoda zwracająca wartość i przyjmująca jeden parametr),
- "Predicate" (wyrażenie zwracające wartość logiczną przyjmujące jeden parametr),
- "Supplier" (metoda zwracająca wartość i nieprzyjmująca żadnych parametrów) 👈 to jest ten 😇.
Nazwa sama wskazuje znaczenie - "supplier" ma za zadanie tylko coś dostarczyć, lecz nie interesują go żadne informacje płynące w jego kierunku 🚫. Zatem stosuj w chwili, gdy wyrażenie lambda ma zwracać wartość bez przyjmowania jakichkolwiek parametrów.
Przykład kodu źródłowego
A teraz część praktyczna. Załóżmy, że pragniemy wstawić "Supplier" w języku Java do metody:
public void doSomething() {
}Wstawiamy parametr dostawcy w taki sposób:
public void doSomething(Supplier supplier) Dajmy teraz "float" dla małego zróżnicowania, a co tam 😄! Oto jak wygląda pełna definicja z najprostszym użyciem dostawcy:
public void doSomething(Supplier supplier) {
if(supplier != null) {
System.out.println("Wynik działania dostawcy: " + supplier.get());
}
} "get" to jest jedyna metoda interfejsu "Supplier" w języku Java i ona jest miejscem zwracania wartości z wyrażenia lambda, jakie będziemy wstawiać w momencie wywoływania metody "doSomething". Zobacz, że metoda dalej jest typu "void", a dostawca mimo tego, zwraca wartość, zatem działają niezależnie od siebie 🌟! Parametr dostawcy może przyjąć wartość "null", więc radzę otoczyć wywołanie "get" instrukcją warunkową na taką okoliczność ⚠️.
A teraz przykładowe wywołania metody z dostawcą w parametrze. Na początek bardzo prościutkie:
doSomething(() -> 5f*5);Dostawca zwróci nam wartość 25. Musimy dopisać literkę 'f', bo wynik zostanie uznany za całkowitoliczbowy (a to przyniesie błąd kompilacji, bo my zdefiniowaliśmy typ "float" ℹ️). IDE z jakiego korzystasz, może też Ci zasugerować rzutowanie:
doSomething(() -> (float)(5*5));Tak też można. A to drugi przykład:
doSomething(() -> new Random().nextFloat(0f, 100f));Zwrócenie wartości pseudolosowej z zakresu <0f; 100f).
Dostawcy można użyć też do bardziej skomplikowanych rzeczy, na przykład do uprzedniego "przygotowania" nowo tworzonego obiektu. Moglibyśmy zdefiniować sobie interfejs zawierający odpowiednią metodę:
public interface Initialisable {
void init();
}i wtedy do definicji metody dorzucić "Supplier" o typie interfejsowym, w środku pobrać referencję i jeżeli ona istnieje, to wywołać metodę, która od razu zainicjuje obiekt implementujący ten interfejs:
public void doSomething(Supplier supplier) {
if(supplier == null) {
return;
}
var initialisable = supplier.get();
if(initialisable != null) {
initialisable.init();
}
} Do tego dorzucić prostą postać klasy:
public class InitialisableClass implements Initialisable {
public void init() {
System.out.println("Obiekt został zainicjowany.");
}
}i w odpowiedni sposób wywołać konstruktor klasy:
doSomething(InitialisableClass::new);Jest jeszcze wiele innych zastosowań dostawcy, które najlepiej odkryć samemu i dopasować do potrzeb projektowych 👓!
![]() |
Dzięki użyciu interfejsu funkcyjnego "Supplier" w języku Java, możesz żądać od użytkownika w momencie wywołania metody, wstawienia wyrażenia lambda nieprzyjmującego żadnych parametrów, za to mającego zwrócić wartość wskazanego typu!
To koniec.
NASTĘPNY ARTYKUŁ: Optional w języku Java. Ochrona przed wartością null
