Giriş
Şu satırı dahil ederiz.
Şu satırı dahil ederiz.
import java.util.function.Supplier;
- Parametre almaz ve sonuç olarak bir nesne döner. Bu açından Callable ile aynıdır. Ancak Callable'dan farklı olarak checked exception fırlatmaz. Açıklaması şöyleSuppliers are similar to Callable’s but they do not throw checked exceptions- Guava'da da benzer com.google.common.base.Supplier isimli bir sınıf var. Bu sınıf ta java.util.function.Supplier arayüzünden kalıtıyor.
- Aslında supplier bir anlamda factory örüntüsü ile aynı şey.
constructor - lambda
Örnek
Tek bir nesne sağlayan bir Supplier için şöyle yaparız.
Her seferinde farklı bir nesne sağlayan Supplier için için şöyle yaparız. Bu kod Stream'i 10 tane farkı nesne ile doldurur.
-> new Thread() {};
Açıklaması şöyleconstructor - lambda
Örnek
Tek bir nesne sağlayan bir Supplier için şöyle yaparız.
java.util.function.Supplier<String> supplier = () -> "test";
ÖrnekHer seferinde farklı bir nesne sağlayan Supplier için için şöyle yaparız. Bu kod Stream'i 10 tane farkı nesne ile doldurur.
Supplier<Test> supplier = () -> new Test();
List<Test> list = Stream
.generate(supplier)
.limit(10)
.collect(Collectors.toList());
System.out.println(list.size()); // 10
// Prints false, showing it really is calling the supplier
// once per iteration.
System.out.println(list.get(0) == list.get(1));
The anonymous class declaration new Thread() {} and you are not in a static context, so this expression implicitly captures this.Lambda içinde this capture edilmesin istersek şöyle yaparız.
static void write() throws Exception {
Supplier<Thread> supplier = (Supplier<Thread> & Serializable)
() -> new Thread() {};
...
}
constructor - Method ReferenceMethod Reference alır. Şöyle yaparız.
Supplier<Student> myStudent = Student::new;
get metoduŞöyle yaparız.
Supplier<int[]> supplier = ...;
int[] primes = supplier.get();
Şöyle yaparız.public class NaturalNumbers implements Supplier<Integer> {
private int i = 0;
public Integer get() { return ++i; }
}
Stream oluşturmak için şöyle yaparız.Stream<Integer> s =
Stream.generate(new NaturalNumbers());
Supplier Niçin LazımEn en önemli avantajı nesnenin yaratılmasını ötelemesi. Açıklaması şöyle
Using a Supplier postpones the creation of the instance.Aradaki farkı görmek için şöyle yaparız.
public void makeNewThingSometimes (T newInstance)
{
if (someCondition) {
this.instance = newInstance;
}
}
public void makeNewThingSometimes (Supplier<T> supplier)
{
if (someCondition) {
this.instance = supplier.get();
}
}
Hiç yorum yok:
Yorum Gönder