Examinando o Java Collections Framework, notei que algumas das interfaces têm o comentário (optional operation). Esses métodos permitem a implementação de classes através de um UnsupportedOperationExceptionse eles simplesmente não querem implementar esse método.
Um exemplo disso é o addAllmétodo no Set Interface.
Agora, conforme declarado nesta série de perguntas, as interfaces são um contrato definidor do que o uso pode esperar.
As interfaces são importantes porque separam o que uma classe faz e como ela faz. O contrato que define o que um cliente pode esperar deixa o desenvolvedor livre para implementá-lo da maneira que escolher, desde que cumpra o contrato.
e
Uma interface é uma descrição das ações que um objeto pode executar ... por exemplo, quando você liga um interruptor de luz, a luz acende, você não se importa como, exatamente o que faz. Na Programação Orientada a Objetos, uma Interface é uma descrição de todas as funções que um objeto deve ter para ser um "X".
e
Eu acho que a abordagem baseada em interface é significativamente melhor. Você pode zombar de suas dependências bem e tudo é basicamente menos acoplado.
Qual é o objetivo de uma interface?
Interface + Extensão (mixin) vs Classe Base
Dado que o objetivo das interfaces é definir um contrato e tornar suas dependências fracamente acopladas, alguns métodos não prejudicam UnsupportedOperationExceptiono objetivo? Isso significa que eu não posso mais passar Sete usar addAll. Em vez disso, tenho que saber qual implementação Setfoi aprovada, para que eu possa saber se posso usar addAllou não. Isso me parece inútil.
Então, qual é o sentido UnsupportedOperationException? Ele está apenas compensando o código legado e eles precisam limpar suas interfaces? Ou tem um objetivo mais sensitivo que estou sentindo falta?
src.zipele funciona muito bem. Ajuda a saber exatamente qual código o JRE está executando algumas vezes e não adiar para o JavaDoc, que pode ser um pouco detalhado.
addAllemHashSet. Adia para a implementação padrão naAbstractCollectionqual certamente não é lançadaUnsupportedOperationException.