Когда следует переносить исключения времени выполнения / непроверенные исключения? В чем необходимость? Почему был введен CompletionException
в java8
? В java есть и другие примеры, и, пожалуйста, включите столько примеров, сколько хотите.
Когда следует переносить исключения времени выполнения / непроверенные исключения - например, CompletionException
Ответы (1)
Я оборачиваю проверенные исключения всякий раз, когда представляю интерфейс. Например, если бы у меня был интерфейс
public interface DoSomething { void doSomething() throws DoSomethingException }
С моим собственным проверенным классом исключений DoSomethingException
. Это потому, что я заключаю договор с клиентами интерфейса, что будет выброшено только это исключение. Это отделяет клиентов от исключений, создаваемых реализациями DoSomething
. Независимо от того, поймаю ли я RuntimeExceptions
и закрою проверенное исключение, я подхожу к каждому конкретному случаю. Например, если реализация DoSomething
использует класс, который достаточно часто бросает RuntimeException
, я бы поймал RuntimeException
и заключил бы их в свое проверенное исключение.
java.util.concurrent.CompletionException
, представленный в Java 8, является частью параллельного пакета, что указывает на то, что он используется для новых параллельных инструментов, представленных в Java 8. Например, https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletionStage.html
CompletableFuture
делает. - person Holger   schedule 10.09.2015ExecutionException
,ExceptionInInitializerError
, _ 3_, _ 4_ и многие другие. Как правило, это мотивация для создания разных типов исключений. - person Holger   schedule 11.09.2015