Иерархия мультивещания или исключения - PullRequest
0 голосов
/ 17 июня 2019

Что больше соответствует чистому коду. Используя Multicatching или создайте исключение суперкласса и поймайте его.

try {
      //some action     
} catch (Exception1 | Exception2 e) {
      //some action after exception    
}

или

Exception1 extends SuperClassException  
Exception2 extends SuperClassException

try {
       //some action     
} catch (SuperClassException e) {
      //some action after exception    
}

Ответы [ 3 ]

2 голосов
/ 17 июня 2019

Что более соответствует чистому коду.Используя Multicatching или создавая исключение суперкласса и перехватывая его.

Чистый код здесь не очень помогает.Поскольку я не могу придумать какое-либо четкое правило, которое указывает на один из двух вариантов.Таким образом, я думаю, что это сводится к (личному / командному) стилю.

В конце концов, оба подхода имеют свои плюсы и минусы:

Первый более многословен, так как он сообщает точно , какие исключения будут обнаружены.Вы смотрите на это, и вы знаете.

Второй скрывает этот факт, поскольку вы действительно не видите, «сколько» исключений может попасть в эту категорию.Но, конечно, в некоторой степени у вас есть та же проблема с множественным уловом, так как вы также можете перехватить один или несколько основных типов исключений.

С этой точки зрения моя рекомендация будет такой:

  • , когда у вас есть несколько различных исключений, затем просто перечислите их (особенно если в настоящее время нетотличный суперкласс, который вы могли бы использовать вместо этого)
  • когда никакой конкретной информации о типе не требуется, тогда, конечно, поймайте только одну вещь супертипа
1 голос
/ 17 июня 2019

Вы должны учитывать обстоятельства.Если иерархия уже существует и вы хотите перехватить все классы из определенной ветви иерархии - вы вполне можете перейти к перехвату суперкласса.

Сказав это, я определенно не буду создавать дополнительную структуру только для уменьшениялинии - особенно если между исключениями нет четкой зависимости IS, и вы создаете суперкласс только на основе инстинкта, что «возможно, эти два принадлежат друг другу, потому что я ловлю их в одном месте».Вы сокращаете строки, но создаете дополнительную сложность в иерархии классов - что, по-моему, значительно затрудняет анализ кода и увеличивает время, необходимое для прогнозирования его поведения.

1 голос
/ 17 июня 2019

Последнее, если ваш проект определяет суперкласс, и все подклассы одинаково релевантны вашему предложению catch и должны обрабатываться одинаково.

Использование меньшего количества типов исключений вВаш код улучшает читабельность и, следовательно, снижает нагрузку на.Тем не менее, это преимущество теряется, когда существуют семантические различия между перехватом суперкласса и отдельных соответствующих подклассов.

Однако, если одно из ваших подклассовых исключений требует особой обработки при выдаче или представляет особый интерес для ваших методологий ведения журнала,тогда вы захотите использовать отдельные блоки catch.

...