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