Спецификация исключения - PullRequest
12 голосов
/ 07 мая 2010

Является ли спецификация исключения частью сигнатуры метода? Я имею в виду:

public void someMethod(String myString) throws IOException

Является ли ' throws IOException ' частью подписи этого метода?

Спасибо

Ответы [ 2 ]

7 голосов
/ 07 мая 2010

В ответ на ответ Джона Скита и в ответ на комментарий

@ Jon Skeet Почему тогда я не могу сделать так, чтобы public void run () выбрасывал IOException в классе, который реализует Runnable? - Зная, что я знаю тебя

Раздел 8.4.6 Спецификации языка Java (3-е издание) гласит:

Метод, который переопределяет или скрывает другой метод (раздел 8.4.8), включая методы, реализующие методы abstract, определенные в интерфейсах, не может быть объявлен для создания большего количества проверенных исключений, чем переопределенный или скрытый метод.

Точнее, предположим, что B является классом или интерфейсом, а A является суперклассом или суперинтерфейсом B и объявлением метода n в B переопределяет или скрывает объявление метода m в A . Если n имеет предложение throws, в котором упоминаются все проверенные типы исключений, тогда m должно иметь предложение throws, а для каждого проверенного типа исключения, указанного в предложении throws n , тот же класс исключений или один из его супертипов должен иметь место при удалении предложения throws m ; в противном случае возникает ошибка времени компиляции.

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

5 голосов
/ 07 мая 2010

Нет. Из раздела 8.4.2 спецификации языка Java :

Два метода имеют одинаковую подпись, если они имеют одинаковое имя и аргумент типы.

Два объявления метода или конструктора M и N имеют одинаковые типы аргументов если все следующие условия держать:

У них одинаковое количество формальных параметры (возможно, ноль) они имеют такое же количество параметров типа (возможно, ноль) Позвольте быть параметры формального типа М и пусть быть формальным типом Параметры N. После переименования каждого появление Bi в типе N для Ai границы соответствующего типа переменные и типы аргументов М и N одинаковы.

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

Кроме того, из в документе Божо цитирует :

Определение: два компонента объявление метода включает метод подпись - название метода и типы параметров.

Там нет упоминаний об исключениях ...

РЕДАКТИРОВАТЬ: Что касается переопределения метода (или реализации интерфейса), из раздел 8.4.8.3 :

Объявление метода не должно иметь бросает пункт, который конфликтует (§8.4.6) с тем из любого метода, который это переопределяет или скрывает; в противном случае Произошла ошибка во время компиляции.

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