Можем ли мы добавить Scal throw в блоке finally к исходному исключению в качестве подавленного исключения в Scala?
В Java, если мы нажмем исключение в блоке try, а затем еще одно исключение в блоке finally, второе исключение будет добавлено обратно к первому исключению как подавленное исключение.Поэтому второе исключение не будет маскировать первое исключение, и мы все еще можем проанализировать, что произошло, проверив его исключенное исключение.
import java.util.stream.Stream;
class Scratch {
static class MyCloseable implements AutoCloseable {
@Override
public void close() throws Exception {
throw new Exception("FROM CLOSE METHOD");
}
}
public static void main(String[] args) {
try {
try (final MyCloseable closeable = new MyCloseable()){
throw new Exception("From Try Block");
}
} catch (Throwable t) {
System.out.println(t);
Stream.of(t.getSuppressed()).forEach(System.out::println);
}
}
}
выдаст исключения
java.lang.Exception: From Try Block
java.lang.Exception: FROM CLOSE METHOD
Однако, похоже, что Scala просто отбрасываетвторое исключение (выбрасывание из блока finally) и игнорировать первое исключение (выбрасывание из блока try).
try {
try {
throw new Exception("From Try Block")
} finally {
throw new Exception("From Final Block")
}
} catch {
case e => e :: e.getSuppressed().toList
}
Приведенный выше код просто вернет только второе исключение (выброшенное из последнего блока).Тем не менее, я хотел бы иметь способ получить оба исключения.
В любом случае, чтобы сделать код выше, лучше?