![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Romper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 7.11.2012 Репутация: нет Всего: 1 |
если раскомментировать 1 строку все нормально, если 2 то "Exception in thread "main" java.lang.UnsupportedOperationException" история такая, изначально был только класс List, у него метод add не кидает исключения, и где-то метод addValue который не обрабатывает исключения, потом кто-то создал класс UnmodifiableList, отнаследовался от List, но у него метод add кидает исключения как защититься от такого? |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
List не класс, List интерфейс, и у него есть некие реализации. Для операций изменяющих содержимое явно указанно, что они могут выбрасывать UnsupportedOperationException. Поэтому или ты работаешь в неком "известном" окружении, про которое ты знаешь что тебе передают modifiable list, или ты не используешь эти операции, или делаешь свою копию List-а.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Romper |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 7.11.2012 Репутация: нет Всего: 1 |
я пример хотел показать, могут быть совсем другие самописные классы
это только у List или все "объекты"? если только у List мне вот интересно, они изначально об этом написали или когда добавили UnmodifiableList, если когда добавили то это как бы проблема, потому что до этого может быть написано очень много кода вот эту проблему мне и интересно узнать как решать/предотвратить |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
У метода есть контракт описывающий поведение, и вести он себя должен соответвенно этому контракту. Если в контракте прописано что метод может выбрасывать эксепшн, надо быть к этому готовым. Если же есть поведение не описанное контарктом, то это или проблема контракта или реализации. В любом случае это не техническая проблема. Я говорил именно про List, но похожее поведение у всех Java коллекций. UnsupportedOperationException существует с JDK 1.2. Не думаю что есть много кода написанного во времена до JDK 1.2. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Romper |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 7.11.2012 Репутация: нет Всего: 1 |
согласен ![]() видимо пример с List не совсем удачный, я имел ввиду вот что, допустим есть такой код
со временем поивляется много кода с использованием Foo, метод test вызывается без обработки исключений, так как на момент написания он ничего не кидает потом появляется класс Bar
а вместо некоторых объектов типа Foo появляются объекты типа Bar
и понятно что теперь иногда вылетают исключения Конечно это проблема реализации, но что надо сделать чтобы быстрее узнать о существовании такой проблемы? |
||||||||||
|
|||||||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Стоит заметить, что бывает 2 типа эксепшенов которые может выкидывать мето: 1. Ожидаемые эксепшены, которые задекларированны в контракте. 2. Эксепшены которые разработчиком не планировались и происходят или из-за внешних проблем или из-за ошибки в коде, это всякие OutOfMemoryError и NullPointerException. Применительно к твоему примеру, надо понять где проблема: * метод пока не реализован (содержит ошибку), но будет реализован/пофиксан в будущем - тогда ничего не делаем, ждем фикса * метод так и должен выкидывать эксепшн, значит это проблема контракта базового метода - нужно изменить контакт, например задекларировать в Foo.test() выбрасываемый эксепшн, причем желательно чтобы он был checked чтобы найти все места где он может возникнуть -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |