Почему исключения только иногда требуют, чтобы они были заключены в try / catch? - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть статический класс Factory, который выдает исключение, если не init ed перед вызовом. Что я не понимаю, почему Eclipse кричит на меня за то, что я сгенерировал исключение (оно требует, чтобы я окружил бросок при попытке / ловле) на Фабрике, но в другом классе, где я выбрасываю UnsupportedOperationException, затмение просто отлично .

Есть ли правило, о котором я не знаю, что я нарушаю?

Мой статический звонок (источник проблемы):

public static Object createObject() {
    if (CONTEXT == null)
        throw new InstantiationException("Factory not inited.");
    // ...
}

Редактировать: я понимаю, что это, вероятно, лучше подходит как одиночный, а не статический класс, но вопрос все еще остается.

Ответы [ 3 ]

12 голосов
/ 06 декабря 2011

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

http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

Если выбрасываемое вами исключение происходит из RuntimeException, оно не проверяется и не нуждаетсябыть объявленным / обработанным явно.Все остальные должны быть.

1 голос
/ 06 декабря 2011

Вы должны добавить предложение throws в заголовок метода:

public static Object createObject() throws InstantiationException

На RuntimeException, Java-документ говорит:

Метод не требуется объявлять в его throwпредложение

, поэтому eclipse не выкрикивает, когда не видит его в объявлении метода.

1 голос
/ 06 декабря 2011

UnsupportedOperationException не отмечен, однако InstantiationException отмечен.Разница в том, что один расширяет Exception, а другой RuntimeException, что является разницей между отмеченными и непроверенными исключениями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...