почему java.lang. Throwable класс?

В прилагательных Java, заканчивающихся в - способный, интерфейсы Serializable, Comparable и т.д... Итак, почему Throwable класс? Не был бы обработка исключений быть легче если Throwable был интерфейс? (Редактирование: например, Классы исключений не должны расширять Exception/RuntimeException.)

Очевидно, изменение его теперь отсутствует вопрос. Но это могло быть сделано абстрактным? Не был бы это избегать плохой практики throw new Throwable();

38
задан mdma 23 May 2010 в 01:48
поделиться

3 ответа

Так почему Throwable - это класс?

Я могу придумать две причины:

  1. Исключения имеют состояние.В частности, сообщение, причина и трассировка стека.
  2. Для JVM проще реализовать эффективные блоки catch. Проверка иерархии классов дешевле проверки интерфейса.

Разве обработка исключений не была бы проще? если бы Throwable был интерфейсом?

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

Но можно ли сделать это абстрактным?

Теоретически да. На практике нет. Слишком много кода зависит от возможности создать экземпляр Throwable для вызова getStackTrace.

17
ответ дан 27 November 2019 в 03:32
поделиться

Вот как Джеймс Гослинг объяснил свое решение:

Программа подключения Java-разработчика : Почему Throwable не является интерфейсом? Название предполагает, что так и должно было быть. Возможность catch для типов, то есть что-то вроде try {} catch (<некоторый интерфейс или класс>) , а не только классы. Это сделало бы Java [язык программирования] намного более гибким.

Джеймс Гослинг : Причина, по которой Throwable и остальные не являются интерфейсами, заключается в том, что мы решили, или я решил довольно рано. Я решил, что хочу иметь какое-то состояние, связанное с каждым генерируемым исключением. А с интерфейсами этого не сделать; вы можете сделать это только с классами. Состояние, которое там есть, в основном стандартное. Есть сообщение, есть снимок и тому подобное - это всегда есть. а также, если вы сделаете Throwable интерфейсом, возникнет соблазн назначить, чтобы любой старый объект стал Throwable вещью. Стилистически кажется, что бросание общих объектов - это, вероятно, плохая идея, что вещи, которые вы хотите бросить, на самом деле должны быть вещами, которые должны быть исключениями, которые действительно отражают природу исключения и то, что произошло. Это не просто общие структуры данных.

Ссылки

56
ответ дан 27 November 2019 в 03:32
поделиться

Ну, Hashtable - это тоже конкретный класс! Что-то, что можно хешировать.

а что такое клонирование? это неправильное английское слово.

3
ответ дан 27 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: