Mirando a través del Java Collections Framework, he notado que algunas de las interfaces tienen el comentario (optional operation)
. Estos métodos permiten implementar clases a través de un UnsupportedOperationException
si simplemente no quieren implementar ese método.
Un ejemplo de esto es el addAll
método en Set Interface
.
Ahora, como se indica en esta serie de preguntas, las interfaces son un contrato definitorio de lo que el uso puede esperar.
Las interfaces son importantes porque separan lo que hace una clase de cómo lo hace. El contrato que define lo que un cliente puede esperar deja al desarrollador libre de implementarlo de la forma que elija, siempre y cuando mantenga el contrato.
y
Una interfaz es una descripción de las acciones que puede hacer un objeto ... por ejemplo, cuando se activa un interruptor de luz, la luz se enciende, no importa cómo, solo eso. En la programación orientada a objetos, una interfaz es una descripción de todas las funciones que debe tener un objeto para ser una "X".
y
Creo que el enfoque basado en la interfaz es significativamente mejor. Luego puede burlarse de sus dependencias muy bien, y todo está básicamente menos estrechamente acoplado.
¿Cuál es el punto de una interfaz?
Interfaz + Extensión (mixin) vs Clase Base
Dado que el propósito de las interfaces es definir un contrato y hacer que sus dependencias se acoplen libremente, ¿no tiene algunos métodos arrojar una UnsupportedOperationException
especie de derrota del propósito? Significa que ya no se me puede pasar ay Set
solo usarlo addAll
. Más bien, tengo que saber qué implementación se Set
me aprobó, para poder saber si puedo usarla addAll
o no. Eso me parece bastante inútil.
Entonces, ¿de qué sirve UnsupportedOperationException
? ¿Solo está compensando el código heredado y necesitan limpiar sus interfaces? ¿O tiene un propósito más sensorial que me estoy perdiendo?
src.zip
él, funciona muy bien. Es útil saber exactamente qué código se está ejecutando el JRE a veces y no diferir al JavaDoc, que puede ser un poco detallado.
addAll
enHashSet
. Difiere a la implementación predeterminada en laAbstractCollection
que ciertamente no se lanzaUnsupportedOperationException
.