İçindekiler gibi işlevsel arabirimlerin anlamını kavramakta güçlük çekmenizin nedeni java.util.function
, burada tanımlanan arabirimlerin herhangi bir anlamı olmamasıdır! Temelde anlambilim değil yapıyı temsil etmek için bulunurlar .
Bu, çoğu Java API'si için alışılmadık bir durumdur. Sınıf veya arabirim gibi tipik Java API'sinin anlamı vardır ve temsil ettiği şey için zihinsel bir model geliştirebilir ve üzerindeki işlemleri anlamak için bunu kullanabilirsiniz. java.util.List
Örneğin düşünün . A List
, diğer nesnelerin bulunduğu bir kaptır. Bir dizileri ve indeksi var. Listede bulunan nesnelerin sayısı tarafından döndürülür size()
. Her nesnenin 0..size-1 (dahil) aralığında bir dizini vardır. İ indeksindeki nesne çağrı yapılarak alınabilir list.get(i)
. Ve benzeri.
İşlevsel arayüzlerin java.util.function
böyle bir anlamı yoktur. Bunun yerine, bağımsız değişkenlerin sayısı, dönüş değerlerinin sayısı ve (bazen) bir bağımsız değişken veya dönüş değerinin ilkel olup olmadığı gibi bir işlevin yapısını temsil eden arabirimlerdir . Dolayısıyla Function<T,R>
, T türünde tek bir bağımsız değişken alan ve R türünden bir değer döndüren bir işlevi temsil eden bir şeyimiz var . Bu kadar. Bu işlev ne işe yarar? Tek bir argüman alıp tek bir değer döndürdüğü sürece her şeyi yapabilir. Bu nedenle için belirtim Function<T,R>
, "Bir bağımsız değişkeni kabul eden ve bir sonuç üreten bir işlevi temsil eder" den biraz daha fazlasıdır.
Açıkça, kod yazarken anlamı vardır ve bu anlam bir yerden gelmelidir. İşlevsel arayüzler söz konusu olduğunda anlam, kullanıldıkları bağlamdan gelir. Arayüzün Function<T,R>
tek başına bir anlamı yoktur. Bununla birlikte, java.util.Map<K,V>
API'de aşağıdakiler vardır:
V computeIfAbsent(K key, Function<K,V> mappingFunction)
(kısalık için joker karakterler seçilmiştir)
Ah, bu kullanımı Function
bir "eşleme fonksiyonu" olarak. Bu ne yapar? Bu bağlamda, key
haritada halihazırda mevcut değilse, eşleme işlevi çağrılır ve anahtar verilir ve bir değer üretmesi beklenir ve ortaya çıkan anahtar / değer çifti haritaya eklenir.
Bu nedenle, teknik özelliklere Function
(veya bu konuda diğer işlevsel arayüzlerden herhangi birine) bakıp ne anlama geldiklerini anlamaya çalışamazsınız. Ne anlama geldiklerini anlamak için diğer API'lerde nerede kullanıldıklarına bakmanız gerekir ve bu anlam yalnızca bu bağlam için geçerlidir.
Consumer
veSupplier
ayrıca arayabilir öğretici içinConsumer
...