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 UnsupportedOperationException
se eles simplesmente não querem implementar esse método.
Um exemplo disso é o addAll
mé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 UnsupportedOperationException
o objetivo? Isso significa que eu não posso mais passar Set
e usar addAll
. Em vez disso, tenho que saber qual implementação Set
foi aprovada, para que eu possa saber se posso usar addAll
ou 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.zip
ele 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.
addAll
emHashSet
. Adia para a implementação padrão naAbstractCollection
qual certamente não é lançadaUnsupportedOperationException
.