Просматривая Java Collections Framework, я заметил, что довольно много интерфейсов имеют комментарий (optional operation). Эти методы позволяют реализовать классы, UnsupportedOperationExceptionесли они просто не хотят реализовывать этот метод.
Примером этого является addAllметод в Set Interface.
Теперь, как указано в этой серии вопросов, интерфейсы являются определяющим контрактом для того, что может ожидать использование.
Интерфейсы важны, потому что они отделяют то, что делает класс, от того, как он это делает. Контракт, определяющий, чего может ожидать клиент, дает разработчику право свободно реализовывать его любым удобным для него способом, пока он поддерживает контракт.
и
Интерфейс - это описание действий, которые объект может выполнять ... например, когда вы нажимаете выключатель света, свет включается, вам все равно, как, просто так и происходит. В объектно-ориентированном программировании интерфейс - это описание всех функций, которые должен иметь объект, чтобы быть «Х».
и
Я думаю, что подход на основе интерфейса значительно лучше. После этого вы можете красиво смоделировать свои зависимости, и все в основном будет менее тесно связано.
Интерфейс + расширение (mixin) против базового класса
Учитывая, что цель интерфейсов состоит в том, чтобы определить контракт и сделать ваши зависимости слабо связанными, разве некоторые методы не бросают своего UnsupportedOperationExceptionрода поражение цели? Это значит, что я больше не могу пройти Setи просто использовать addAll. Скорее, я должен знать, какую реализацию Setя прошел, чтобы я мог знать, могу ли я использовать addAllили нет. Это кажется довольно бесполезным для меня.
Так в чем смысл UnsupportedOperationException? Это просто компенсирует устаревший код, и им нужно очистить свои интерфейсы? Или у меня есть более чувственная цель, которую мне не хватает?
src.zipним, он прекрасно работает. Это помогает точно знать, какой код JRE иногда выполняет, и не откладывать на JavaDoc, который может быть немного многословным.
addAllвHashSet. Он сдвинуто реализации по умолчанию , вAbstractCollectionкотором большинство , конечно же , не бросатьUnsupportedOperationException.