Tôi đã làm việc với loại Tùy chọn mới trong Java 8 và tôi đã bắt gặp một hoạt động có vẻ như là một hoạt động phổ biến không được hỗ trợ về mặt chức năng: "orElseOptional"
Hãy xem xét các mẫu sau:
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);
}
Có nhiều hình thức của mẫu này, nhưng nó có ý định muốn "orElse" trên một tùy chọn có chức năng tạo ra một tùy chọn mới, chỉ được gọi nếu hiện tại không tồn tại.
Việc thực hiện sẽ như thế này:
public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
return value != null ? this : other.get();
}
Tôi tò mò liệu có lý do nào mà một phương pháp như vậy không tồn tại hay không, nếu tôi chỉ sử dụng Tùy chọn theo cách không có chủ ý, và những cách khác mà mọi người đã đưa ra để giải quyết trường hợp này.
Tôi nên nói rằng tôi nghĩ rằng các giải pháp liên quan đến các lớp / phương thức tiện ích tùy chỉnh không thanh lịch vì những người làm việc với mã của tôi sẽ không nhất thiết biết chúng tồn tại.
Ngoài ra, nếu có ai biết, liệu một phương thức như vậy có được đưa vào JDK 9 không, và tôi có thể đề xuất một phương thức như vậy ở đâu? Điều này có vẻ như là một thiếu sót khá rõ ràng đối với API đối với tôi.
orElseGet()
cho những gì OP cần, chỉ có điều nó không tạo ra cú pháp xếp tầng đẹp.