Java 8'deki yeni İsteğe bağlı türle çalışıyorum ve işlevsel olarak desteklenmeyen ortak bir işlem gibi görünen bir şeyle karşılaştım: bir "orElseOptional"
Aşağıdaki modeli düşünün:
Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
Optional<Result> resultFromServiceB = serviceB(args);
if (resultFromServiceB.isPresent) return resultFromServiceB;
else return serviceC(args);
}
Bu modelin birçok formu vardır, ancak yeni bir isteğe bağlı üreten bir işlevi alan, yalnızca geçerli olanı yoksa, isteğe bağlı bir "orElse" istemekle kaynar.
Uygulanması şu şekilde görünecektir:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Böyle bir yöntemin var olmamasının bir nedeni olup olmadığını, isteğe bağlı olarak sadece isteğe bağlı olmayan bir şekilde kullanıyorsam ve insanların bu dava ile başa çıkmak için başka hangi yollarla geldiklerini merak ediyorum.
Kodumla çalışan insanlar mutlaka var olduklarını bilmeyeceklerinden, özel yardımcı sınıflar / yöntemler içeren çözümlerin zarif olmadığını düşünüyorum.
Ayrıca, herhangi biri bilirse, böyle bir yöntem JDK 9'a dahil edilir ve böyle bir yöntemi nereden önerebilirim? Bu benim için API için oldukça göze çarpan bir ihmal gibi görünüyor.
orElseGet()
OP'nin ihtiyacı olan şeylere sahiptir , sadece güzel basamaklı sözdizimi üretmez.