2013-05-20 3 views
4

Я работал с IBM Rational Software Architect для программного обеспечения Websphere (RAD) и запускал анализатор кода. Я получил предупреждение, что пользовательский класс исключения Java должен быть окончательным. Но для этого нет надлежащей причины. Во всяком случае для некоторых требований мы должны расширить пользовательские классы исключений для поддержки иерархии исключений. Таким образом, окончательный вариант бесполезен. В некоторых случаях, если мы хотим ограничить создание объекта, мы можем пометить contructor как private.Почему пользовательский класс исключений java должен быть окончательным

Таким образом, может быть любое тело, пожалуйста, дайте мне знать, почему пользовательский класс исключений должен быть окончательным?

+1

Не верьте всему, что предлагает вам IDE. – EJP

ответ

4

Я хотел бы направить вас к книге «Эффективная Java: Джош Блох» с хорошими аргументами, чтобы пометить классы final или документировать точки расширения, чтобы сохранить неизменность и защитить от неожиданного поведения.

Я имею в виду Item 17 (дизайн и документ для наследования, либо запретить его)

В любом случае, это может быть просто рекомендация, и если вы убеждены, что вы могли бы игнорировать его - это просто, чтобы убедиться, вы об этом подумали.

0

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

0

Единственная причина, по которой сделать класс Final, - это не допустить его расширения другим классом. Имея это в виду, его до вас, хотите ли вы сделать класс окончательным или нет.

0

Хорошей альтернативой созданию «финала» класса было бы сделать его конструкторы частными и предоставить вместо них статические фабрики (также описанные в книге Джоша Блоха). Но, конечно, как уже было сказано, это зависит от цели вашего класса.