Это проблема Java, а не специфичная для Vavr: в Java, если вы напишите foo(a, b)
, тогда и a
, и b
будут оцениваться до того, как foo(a, b)
будет оцениваться (называется "нетерпеливым").
Таким образом, чтобы оценить Match().of()
, необходимо оценить все Case()
. Для оценки каждого Case()
он должен оценить handleServerSOAPFaultException(exc)
.
Если вы хотите вычислять handleServerSOAPFaultException(exc)
только при совпадении регистра, вам нужно сделать это отложенным вызовом, то есть функцией, то есть Supplier
:
/.../
.onFailure(exc ->
Match(exc).of(
Case($(instanceOf(ServerSOAPFaultException.class)), () -> handleServerSOAPFaultException(exc)),
Case($(instanceOf(Exception.class)), () -> handleDefaultException(exc))
))
.getOrElseGet(exc -> false);