2016-10-13 5 views
1

Я застрял в простой проблеме: у меня есть java.util.Optional и вы хотите использовать метод orElseThrow для выброса исключения, если значение отсутствует. Однако я не могу представить правильный синтаксис для этого в Xtend. В Java я бы сделал:Каков правильный синтаксис для параметра Optional.orElseThrow в Xtend?

Optional<String> host = ... // get from some method 
host.orElseThrow(() -> new IllegalArgumentException("Host is not provided")); 

Но это не скомпилировано в Xtend. Сообщение об ошибке в Затмении, как это (где MyClass это имя моего пользовательского класса):

Multiple markers at this line 
- Type mismatch: cannot convert from Pair<MyClass, IllegalArgumentException> to Supplier<? extends Throwable> 
- no viable alternative at input ')' 

Пожалуйста, помогите!

ответ

3

Попробуйте что-то вроде:

val Optional<String> host = ... // get from some method 
host.orElseThrow[new IllegalArgumentException("Host is not provided")] 

Смотрите документацию о lambda expressions.

(-> является оператором в Xtend, но это не связано с лямбда-выражений см. В документации о operators и поиск оператора Pair в .)

+0

Спасибо! Этот синтаксис работает! Кроме того, с помощью ссылки можно также использовать другую нотацию: host.orElseThrow (| new IllegalArgumentException («Host не предоставляется»)) – Vivit