Đó là vì chúng có ý nghĩa khác nhau.
An Optional<T>
là một đối số có thể hoặc không được cung cấp, giá trị trả về có thể hoặc không được cung cấp hoặc biến có thể hoặc không được gán giá trị. Nếu nó có giá trị, bạn có thể sử dụng .get()
để truy xuất. .get()
có thể ném một ngoại lệ nếu bạn làm điều gì đó sai, tức là, nếu bạn gọi nó khi giá trị không có.
A Supplier<T>
là một đối tượng chức năng sẽ cung cấp giá trị (hoặc null) theo yêu cầu. Không giống như một Optional<T>
, nó hợp lý cho Supplier.get()
để trả lại một giá trị khác nhau mỗi khi bạn gọi nó. Nếu Supplier.get()
ném một ngoại lệ, điều đó có nghĩa là đã xảy ra sự cố khi triển khai, không phải là người gọi đã mắc lỗi.
Nguồn
2017-10-17 04:51:11
Nó làm tăng ngoại lệ 'NoSuchElementException' nếu nó trống; trong trạng thái trống rỗng của nó, nó không phải là 'Nhà cung cấp'. – teppic
Bạn không nên sử dụng 'Tùy chọn # get()', vì vậy nó thực sự là một điều tốt nó không thực hiện giao diện đó. – Tom
@teppic Nhưng đó là một ngoại lệ không được kiểm soát, vậy vấn đề là gì? –