powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавление throws в переопределенном методе
22 сообщений из 22, страница 1 из 1
Добавление throws в переопределенном методе
    #39135216
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Есть некий класс в некой библиотеке
2. Создаем новый класс-наследник класса из п.1
3. Переопределяем в нем один из методов, который имеет уже некий throws (например throws IOException)
4. Внутри этого метода, мы вызваем функции, которые могут выбрасывать например SQLException
5. Компилятор ругается, дескать, мы должны или отловить возможный SQLException в переопределенном методе, или добавить его в throws
6. Но добавить, просто дописав через запятую throws IOException, SQLException в override-методе не выходит (метод исходного класса-то не выбрасывает SQLException и добавить его в библиотеку не кажется правильным).

Понимаю, что можно отловить SQLException и вывести сообщение об ошибке например в свойство(поле) класса.
Но необходимо именно сгенерировать исключение SQLException. Есть варианты?
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135266
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

автормы должны или отловить возможный SQLException в переопределенном методе

ну так и сделайте так в try
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135268
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

вы же ещё можете имплементировать свой интерфейс. В интерфейсе задайте у нового метода спецификацию исключения.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135333
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS1. Есть некий класс в некой библиотеке
2. Создаем новый класс-наследник класса из п.1
3. Переопределяем в нем один из методов, который имеет уже некий throws (например throws IOException)
4. Внутри этого метода, мы вызваем функции, которые могут выбрасывать например SQLException
...
Есть варианты?

Единственный вариант- прекратить заниматься фигнёй и прочитать хорошую книгу про ООП - рекомендую Мейера, "Объектно-ориентированное конструирование программных систем".
Там очень подробно объясняется, что такое контракт.
Так вот- в библиотеке есть контракт- метод может кинуть либо RuntimeException, либо IOException. И другого не дано.
Наследники не могут менять контракт в сторону повышение требований (и новые exception это именно повышение требований).
Это базовый принцип.

Соответственно с точки зрения контракта базового класса случается IOException (проблема ж в вводе/выводе), а что очень хочется выкинуть SQLException - так что-то не правильно понимается.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135572
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominНаследники не могут менять контракт в сторону повышение требований (и новые exception это именно повышение требований).
Это базовый принцип.
Об этом уже догадался, но хотел узнать, может есть нормальные способы обхода этого момента и как правильно решается такой вопрос. Книжки это хорошо, но они не дают ответы на все вопросы, которые могут возникнуть при переходе от теории к практике.
За Мейера спасибо, посмотрю, главное, чтобы там было написано доступно с картинками для тупых ))), а не сухая теория в терминах сферического коневодства ).
Neboну так и сделайте так в try
Так и сделал изначально в catch пишу в поле класса сообщение об ошибке, а после вызова метода проверяю это поле класса на наличиt ошbбки, но по-моему это коряво само по себе и во-вторых, мне действительно надо в случае SQLException выбросить этот эксепшн, но блин как, если в override-методе его нет в throws :/ Можно было бы сгенерить экспешн после вызова метода и проверки поля, но штука в том, что метод этот вызывает в цикле внутри другого метода самой библиотеки, (то есть мне надо прервать выполнение "библиотечного" метода, который в цикле вызывает другой переопределенный метод библиотеки, в котором добавлено обращение к БД, т.е. может быть SQLExcpetion). Как решить через интерфейс (если решаемо) пока не понял.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135600
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSAlexey TominНаследники не могут менять контракт в сторону повышение требований (и новые exception это именно повышение требований).
Это базовый принцип.
Об этом уже догадался, но хотел узнать, может есть нормальные способы обхода этого момента и как правильно решается такой вопрос. Книжки это хорошо, но они не дают ответы на все вопросы, которые могут возникнуть при переходе от теории к практике.
За Мейера спасибо, посмотрю, главное, чтобы там было написано доступно с картинками для тупых ))), а не сухая теория в терминах сферического коневодства ).

Там только практика :) но мозг, думаю, тебе порёвт вклочья :D

JDSNeboну так и сделайте так в try
Так и сделал изначально в catch пишу в поле класса сообщение об ошибке, а после вызова метода проверяю это поле класса на наличиt ошbбки, но по-моему это коряво само по себе и во-вторых, мне действительно надо в случае SQLException выбросить этот эксепшн

Тебу не нужен этот exception. Тебе нужно что-то другое. Вот когда сформулируешь то, что тебе нужно, а не плоды горьких размышлений, тогда и можно будет сказать, как это сделать.

А пока подсказка:
Код: sql
1.
2.
    } catch (SQLException e) {
        throw new IOException(e);



Код: sql
1.
2.
    } catch (IOException e) {
        if (e.getCause() instanceof SQLException) {
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135601
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,
непонятно, почему нельзя соблюдая контракт сделать рядом ещё один метод или применить вместо наследования композицию.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135603
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominА пока подсказка:
+1
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSПонимаю, что можно отловить SQLException и вывести сообщение об ошибке например в свойство(поле) класса.
Но необходимо именно сгенерировать исключение SQLException. Есть варианты?
можно вообще всё погасить и внутри писать только в лог.
Снаружи не будет ничего.
Поэтому, тут верно сказали, что ты так привязался к SQLException?
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135681
JDS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
} catch (SQLException e) {
        throw new IOException(e);


Да так, вчера тоже была такая мысль и пробовал так, но вчера компилятор не пропускал, а сегодня прошло.
Что не так делал вчера непонятно. Но спасибо, то, что нужно.
Petro123можно вообще всё погасить и внутри писать только в лог.
Снаружи не будет ничего.
Поэтому, тут верно сказали, что ты так привязался к SQLException?
Понятно, что можно в лог, можно хоть на почту отправлять, хоть смс Обаме или кому там писать )
Но нужно именно прервать выполнение, т.к. вызов идет в цикле изнутри опять же библиотечного метода, то удобнее всего по эксепшену.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135760
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSНо нужно именно прервать выполнение
хозяин барин.
Выше сказали - подменить(наврать) в исключении, сделать свой метод с приставкой XXXX_ext()
Удачи!
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135811
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

Ещё для конструктора можете увеличить спецификацию исключений. Для метода нельзя, для конструктора можно.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135819
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

Плюс наследника исключения можете выбросить. Создайте наследника, заверните в него свой SQLException)
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135822
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NeboЕщё для конструктора можете увеличить спецификацию исключений. Для метода нельзя, для конструктора можно.
Потому что конструкторы не наследуются и не переопределяются. Поэтому и "увеличить" технически нельзя. Это не "увеличение", а полностью новый конструктор со свои собственным набором исключений. Любым.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135837
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNeboЕщё для конструктора можете увеличить спецификацию исключений. Для метода нельзя, для конструктора можно.
Потому что конструкторы не наследуются и не переопределяются. Поэтому и "увеличить" технически нельзя. Это не "увеличение", а полностью новый конструктор со свои собственным набором исключений. Любым.

Добавлю от Эккеля: Можно добавлять новые исключения для конструкторов, но нужно учитывать и исключения базового конструктора.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135848
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDS,

авторКак решить через интерфейс (если решаемо) пока не понял.

Просто реализуете ваш интерфейс с вашими методами (плюс спецификация SQLException)
Попробуйте. Еще попробуйте с использованием внутреннего класса.
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135893
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo,
imho оверхед это всё
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39135986
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормального способа обрабатывать такие ситуации - не придумали. Но в поле класса - это вообще плохо. Класс будет не многопоточен и код обработке будет смешан с логикой.

Стандартный способ - это обернуть "запрещенный" экзепшен в RuntimeException или своего наследника.

Кстати, checked-экзепшены - это исключительно java-фича, на уровне jvm все исключения - unchecked. Этот факт делает вышеобозначеный способ обхода запрета - обидным и досадным.

Особенно неудобно оборачивать в try-cacth в функциональных интерфейсах...
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39136030
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Nebo,
imho оверхед это всё

Ну да) Ну хоть что-то)
я думаю как бы я сделал.
создал бы интерфейс с методом с нужной спецификацией исключения.
Наследовался бы от библиотечного класса плюс имплементировал интерфейс.
И всё. Исключение можно выбрасывать. Оверхед? Да. А что делать?
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39136058
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nebo,
NeboНаследовался бы от библиотечного класса плюс имплементировал интерфейс.
а имплементация не равна просто добавлению нового метода XXXXX_ext?
Просто всё зависит от цели исключений.
Вполне райзе "Нет файла" можно заменить на SQL райзе "Нет данных".
Это уже БЛ пошла))
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39136088
Nebo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

автора имплементация не равна просто добавлению нового метода XXXXX_ext?

и так тоже можно сделать)
...
Рейтинг: 0 / 0
Добавление throws в переопределенном методе
    #39136344
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDSкак правильно решается такой вопрос" Заворачиваем " одно исключение в другое.
Since 1.4.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Добавление throws в переопределенном методе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]