|
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
|
|
Интерфейс Queue. Зачем дублируются методы06.09.2017, 20:12. Показов 1846. Ответов 6
Метки нет (Все метки)
Доброго времени суток.
Насколько я знаю - интерфейс Queue добавляет дополнительные операции вставки( boolean add(E e), boolean offer(E e) ), получения + удаления главы очереди( E remove(),E poll() ) и просто получение главы очереди( E element(), E peek() ). Для каждой операции определена пара методов, где один метод в случае неудачи бросает исключение, а второй - возвращает false или null. Как я понял - методы в каждой паре различаются только поведением в случае неудачной попытки обращения к очереди. Вопрос: почему для каждой операции нельзя было обойтись только одним методом, зачем разработчики стандартной библиотеки добавили в интерфейс Queue для каждой операции два метода?
0
|
|
| 06.09.2017, 20:12 | |
|
Ответы с готовыми решениями:
6
Переполнение Queue, методы оптимизации Queue Зачем в MSVC дублируются типы данных?
|
|
|
|
| 07.09.2017, 10:09 | |
|
Тут две причины:
1) основывается на том, что для некоторых программ пустая очередь есть ожидаемое состояние коллекции, следовательно не является исключительной ситуацией. Таким образом АПИ не навязывает пользователю свое видение. 2) производительность. Так что у пользователя также есть возможность сделать так чтоб меньше ресурсов жралось
1
|
|
|
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
|
|
| 07.09.2017, 16:03 [ТС] | |
|
Хотелось бы уточнить несколько моментов:
1. скажите пожалуйста, в каком общем случае невозможность добавления элемента может считаться исключением, а когда нормальным явлением? 2. В каком общем случае невозможность удаления элемента является нормальным поведением, а в каком - исключительной ситуацией? И поясните пожалуйста второй пункт касательно производительности.
0
|
|
|
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
|
|
| 07.09.2017, 18:11 | |
|
Касательно производительности: сделать обработку исключения более накладно, чем if'ом проверить на null.
1
|
|
|
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
|
|
| 08.09.2017, 06:35 [ТС] | |
|
Как я понимаю - выбрасывание исключение может использоваться программистом чтобы показать что нарушен контракт использования некоторого метода. Единственная ситуация в которой я могу представить возможное неверное поведение методов добавления элемента в очередь и удаления из неё - это ситуации возникающие в многопоточной программе. Т.е. если бы не было реализаций Queue предназанченных для использования в многопточных программах, то и впричине дублировать
методы небыло бы необходимости. Я прав?
0
|
|
|
|
|||
| 08.09.2017, 10:07 | |||
Сообщение было отмечено Bakuard как решение
РешениеПример: пусть у нас есть некая коллекция и криворукий пользователь кода, который пытается подать в нее экземпляр класса, который запрещен к добавлению в данную коллекцию. Это нештатный случай. Что делать непонятно. Получите исключением по мордасам. А вот если пользователь просто исчерпал доступную память у коллекции, то это вполне себе штатный случай и пользователь получив ошибку может например очистить ее от данных. Пример 2: пусть АПИ из 1 есть. Тогда пользователь сам дурак, что не сделал проверку. Он нарушил порядок использования АПИ. Это исключительная ситуация. Пример 3: пусть есть некая коллекция, которая хранит элементы во внешней среде (не важно где). Пусть для того, чтобы удалить ей нужно: а) обновить свое внутреннее состяние б) отправить запрос наружу чтобы удалили в) получить ответ г) вернуть результат пользователю И если что-то снаружи пошло не так и элементы нельзя удалить, то это нарушение порядка работы общей логики приложения (см. первый ответ), бессмыссленный и беспощадный. Также исключительная ситуация.
1
|
|||
|
0 / 0 / 1
Регистрация: 25.12.2016
Сообщений: 108
|
|
| 08.09.2017, 12:53 [ТС] | |
|
HighPredator, спасибо большое за развернутый, подробный ответ! Считаю что вопрос можно закрыть.
0
|
|
| 08.09.2017, 12:53 | |
|
Помогаю со студенческими работами здесь
7
Зачем нужны ссылки на методы? Зачем нужны виртуальные методы? Интерфейс iFormattable. За что он отвечает и зачем он нужен?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|