Java 8 tài liệu tham khảo phương pháp: cung cấp một nhà cung cấp có khả năng cung cấp một kết quả tham số


147

Tôi muốn sử dụng

java.util.Optional.orElseThrow() 

với một loại ngoại lệ mà yêu cầu một tham số constructor. Một cái gì đó như thế này:

orElseThrow(MyException::new(someArgument)) // obviously NOT working 

Có cách nào để tạo Nhà cung cấp vượt qua giá trị đối số của tôi không?

+19

Tại sao bạn không thể 'orElseThrow (() -> new MyException (someArgument))'? 07 apr. 142014-04-07 15:51:04

289

Chắc chắn. orElseThrow(() -> new MyException(someArgument)).


17

Dường như bạn chỉ có thể ném RuntimeException từ phương thức orElseThrow. Nếu không, bạn sẽ nhận được thông báo lỗi như MyException cannot be converted to java.lang.RuntimeException

+1

cảm ơn, điều này đã ném tôi ra khi sử dụng 'Tùy chọn' trong groovy. Cố gắng để 'ném ngoại lệ' từ một đóng cửa groovy, nhưng nó không thành công với 'java.lang.reflect.UndeclaredThrowableException', thay đổi thành' RuntimeException' đã sửa nó. 12 apr. 152015-04-12 17:19:54

  0

Điều cần biết về điều đó. May mắn thay trong trường hợp của tôi, tôi đang sử dụng RuntimeExceptions, nhưng điều này có thể không phải lúc nào cũng đúng. 25 jul. 172017-07-25 15:15:24


3
optionalUsers.orElseThrow(() -> new UsernameNotFoundException("Username not found"));